C++:初始化列表/命名约定

Fra*_*kMN 8 c++ naming initialization list

以下代码适用于我的机器,但它是良好的做法/保证工作?

struct MyStruct {
   MyStruct(int x, int y, int z) :
       x(x),
       y(y),
       z(z) {
   }

   int x;
   int y;
   int z;
};
Run Code Online (Sandbox Code Playgroud)

具体来说,x(x)保证做我想要的吗?(也就是说,初始化列表中的变量是否始终查看该struct/class的成员?)

我不想使用前导或尾随下划线,因为x是结构的公共成员.

谢谢!

Oli*_*rth 12

是的,这可以保证满足您的期望.

在初始化列表中的括号中"唯一"可以存在的是成员变量.在括号内,通常的规则适用; 局部变量隐藏成员变量.

至于它是否是一种好的做法,那么考虑如果你不小心从构造函数参数列表中删除了一个或多个参数会发生什么.代码仍然可以正常编译!但它会在运行时突然崩溃.尽管如此,我仍然经常使用这种模式.