是的,它是合法的,适用于所有平台。
它将正确地将您的成员变量 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):
您可能希望使用与参数名称相同的成员名称的一个原因是您不太容易出现以下情况:
class A
{
A(int myVariable_)
{
//<-- do something with _myVariable, oops _myVariable wasn't initialized yet
...
_myVariable = myVariable_;
}
int _myVariable;
};
这也可能发生在大型初始化列表中,并且您在初始化列表中初始化之前使用 _myVariable。