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

以下代码适用于我的机器,但它是良好的做法/保证工作?
struct MyStruct {
   MyStruct(int x, int y, int z) :
       x(x),
       y(y),
       z(z) {
   }

   int x;
   int y;
   int z;
};
具体来说,x(x)保证做我想要的吗? (也就是说,初始化列表中的变量是否始终查看该struct / class的成员?) 我不想使用前导或尾随下划线,因为x是结构的公共成员。 谢谢!     
已邀请:
是的,这可以保证满足您的期望。 在初始化列表中的括号中“唯一”可以存在的是成员变量。在括号内,通常的规则适用;局部变量隐藏成员变量。 至于它是否是一种好的做法,那么考虑如果你不小心从构造函数参数列表中删除了一个或多个参数会发生什么。代码仍然可以正常编译!但它会在运行时突然崩溃。尽管如此,我仍然经常使用这种模式。     
虽然它期望你做什么,但通过扩展想象这种情况:
class MyStruct {
public:
   MyStruct(int x, int y, int z)
   :   x(x),
       y(y),
       z(z) 
   {   }
   int x() const;
   int y() const;
   int z() const;

private:
   int x;
   int y;
   int z;
};
哪个不行。这就是我为班级成员加上
m_
的原因。这允许非常易读的代码向读者提示所讨论的标识符是类的一部分。非前缀标识符是函数参数(如在构造函数初始化列表中:
m_x(x)
,或函数局部变量)。     
是的,x(x)完全符合你的要求。 x(x)是成员的名称,x(x)是正式参数。     

要回复问题请先登录注册