c++ - 这是什么说法? (第 6 章,使用 C++ 的原则和实践)

标签 c++ constructor initialization

<分区>

我目前正在使用 Stroustrup 的 Principles and practice using C++ 中第 6 章的计算器程序,我遇到了这本书中没有解释的声明,我在网上找不到任何引用资料(更像是我没有知道要搜索什么)。

Token(char ch)    // make a Token from a char
        :kind(ch), value(0) { }
Token(char ch, double val)     // make a Token from a char and a double
        :kind(ch), value(val) { }

如果对此有任何解释,我将不胜感激。

这是完整的 block :

class Token {
public:
    char kind;        // what kind of token
    double value;     // for numbers: a value
    Token(char ch)    // make a Token from a char
        :kind(ch), value(0) { }
    Token(char ch, double val)     // make a Token from a char and a double
        :kind(ch), value(val) { }
};

提前致谢。

最佳答案

它们被称为构造函数成员初始化列表。

Token(char ch)   
    :kind(ch), value(0) { } // the initialization list starts after the colon

它们在构造函数进入函数体之前初始化它们的成员。需要注意的是,初始化顺序由类中的声明顺序定义:由于 char kindint value 之前声明,kind 必须首先在列表中初始化。不建议在初始化列表中使用其他顺序,因为这可能会给 future 的维护者带来困惑。

关于c++ - 这是什么说法? (第 6 章,使用 C++ 的原则和实践),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54100929/

相关文章:

c++ - 数组元素可以有标识符吗?

c++ - 结构的重新分配使程序崩溃

c++ - 相互调用的互斥函数

java - Java 中的构造函数链和可见性

java - 为接受父对象的子类编写 Java 构造函数

c++ - 使用另一个对象作为构造函数中的参数创建一个对象

c++ - 二叉树节点故障

c++ - 函数模板链接错误

c++ - 尝试使用 const int std::array 时出错

c - 如果缺少 const char* 数组初始化逗号,则生成编译器警告