是的,它是合法的并且适用于所有平台。
它将正确地将您的成员变量 a 初始化为传入的值 a。
一些更干净的人认为以不同的方式命名它们,但并非全部。我个人实际上经常使用它:)
具有相同变量名的初始化列表是有效的,因为初始化列表中初始化项的语法如下:
()
您可以通过创建一个简单的程序来验证我上面写的内容:(它不会编译)
class A
{
A(int a)
: a(5)//<--- try to initialize a non member variable to 5
{
}
};
您将收到类似以下的编译错误:A 没有名为“a”的字段。
附注:
你的原因之一可能不想要使用与参数名称相同的成员名称会更容易出现以下情况:
class A
{
A(int myVarriable)
: myVariable(myVariable)//<--- Bug, there was a typo in the parameter name, myVariable will never be initialized properly
{
}
int myVariable;
};
附注(2):
你的原因之一may want使用与参数名称相同的成员名称可以减少出现以下情况的可能性:
class A
{
A(int myVariable_)
{
//<-- do something with _myVariable, oops _myVariable wasn't initialized yet
...
_myVariable = myVariable_;
}
int _myVariable;
};
这种情况也可能发生在大型初始化列表中,并且您在初始化列表中初始化 _myVariable 之前使用它。