C++ 构造函数参数列表后的冒号符号

C++ 构造函数参数列表后的冒号符号,c++,initializer-list,C++,Initializer List,在上面的代码中(更具体地说是在Sales_数据构造函数中(如下所述)),我不理解冒号和逗号分隔列表的用法 class Sales_data { public: Sales_data(int i, int j, int k) : x(i), y(j), z(k) { } private: int x,y,z; }; 我从未见过任何函数/构造函数参数列表后面有冒号(:)这个冒号在这里是什么意思? 此外,冒号后面的逗号分隔列表是什么?您可能会感到困惑,因为成员

在上面的代码中(更具体地说是在Sales_数据构造函数中(如下所述)),我不理解冒号和逗号分隔列表的用法

class Sales_data {  
  public:  
  Sales_data(int i, int j, int k) : x(i), y(j), z(k) {
  }  
  private:  
  int x,y,z;  
};
我从未见过任何函数/构造函数参数列表后面有冒号(:)这个冒号在这里是什么意思?

此外,冒号后面的逗号分隔列表是什么?

您可能会感到困惑,因为成员变量名(x)与函数参数(也是x)相同,为了清楚起见,您可以避免使用。简化的代码可以是这样的

Sales_data(int i, int j, int k) : x(i), y(j), z(k) {
}  
还困惑吗?然后你可以去做这个(尽管不是那么优化)

这是一个构造函数

这不是标准的函数/方法。每个类(结构)都可以有构造函数。构造函数与类具有相同的名称,并且可以选择获取参数

add_x(int x1) 
{  
   x = x1;
}
为了便于阅读,让我们更好地格式化它

struct add_x {
    int x;
    add_x(int x) : x(x) {}   // This is a constructor with one paramter
};
初始值设定项列表允许您列出成员变量(逗号分隔),并在执行构造函数主体之前对其进行初始化

在这种情况下,使用参数
x
初始化成员
x

struct add_x {
    int x;
    add_x(int x)    // Constructor that takes one argument.
        : x(x)      // This is called the initializer list.
    {}              // This is the body of the constructor.
};
#包括
int main()
{
增加x检验(5);

STD::你的C++书在这个主题上有什么要说的?那条特定的线与函子没有任何关系。你认为它意味着什么?你能自己弄清楚什么?那一行的哪部分你不懂?代码X(X1)的那一部分?可执行语句?下面的函数add_x(int-x1):x(x1){}是初始化成员变量的新样式吗?如果是,那么我如何初始化更多的成员变量(如果我的结构有3或4个成员变量)?你能告诉我“主题名称”吗从书中读出来,使所有这些都变得非常清楚。糟糕的命名总是让事情难以理解。
x
对于参数和(主要是)来说都是一个相当糟糕的名字对于成员变量。和
当用于参数和成员变量时,无论什么
都是一个坏名称。请自便,不要使用重复的标识符,因为它们可以在同一范围内使用。
struct add_x {
    int x;
    add_x(int x)    // Constructor that takes one argument.
        : x(x)      // This is called the initializer list.
    {}              // This is the body of the constructor.
};
#include <iostream>
int main()
{
    add_x   test(5);
    std::cout << test.x << "\n"; // Should print 5
                                 // Note in my example I have removed the private
                                 // section so I can read the value x.
}