在Java中,通常,我可以将构造函数的参数与成员变量同名。
public A(int x)
{
this.x = x;
}
private int x;
在C ++中,我不能。通常,我必须这样做。
public:
A(int x_) : x(x_)
{
}
private:
int x;
还有更好的方法吗?由于构造函数参数名称看起来很难看,当IDE IntelliSense弹出构造函数参数窗口时。
答案 0 :(得分:5)
在C ++中,如果需要,您可以:
struct A {
int x;
A(int x) : x(x) {
foo(this->x);
// if you want the member instead of the parameter here
}
};
虽然我也经常为成员使用样式名称(例如_x
),但我会为非公开成员执行此操作。如果x
是公开的,如本例所示,我会这样做,如果我认为它更具可读性,请查看重命名ctor的参数。
编辑:由于人们似乎陷入了困境,我将在_x
澄清。该标准保留了一些标识符名称:
由于成员的范围限于该类,因此它们不属于第三类。也就是说,不继续偏离轨道会很好。 :)如果您愿意,可以随意在C ++中询问有关保留标识符的问题,并在评论中发布链接。
答案 1 :(得分:3)
您实际上可以在C ++中使用Java方式:
public:
A(int x)
{
this->x = x;
}
但是,也可以只说x(x):
public:
A(int x) : x(x) { }
答案 2 :(得分:3)
C ++很聪明,可以找出你的意思x
,你可以写:
class A {
int x;
A( int x ) : x(x) {};
};
答案 3 :(得分:1)
答案 4 :(得分:1)
我不认为这是可能的。但是,我强烈建议对成员变量使用一致的命名约定,以区别于参数和局部变量。
在我的公司中,我们通常用'm'前缀表示成员变量,例如:
int mMyMemberVariable;
或
int m_MyMemberVariable;
这只是一种风格的例子 - 一致性是关键。
答案 5 :(得分:0)
一种方式(有些人可能会认为这是C ++方式)将在类的字段前加上m_
,以消除字段和构造函数参数名称之间的歧义。