在C++中,标准的哪个部分确定了就地成员与初始化列表的优先级是在C++标准的第12.6.2节中,规定了成员初始化的顺序。
下面是一个包含代码示例的解决方法:
#include
class MyClass {
public:
MyClass(int num) {
std::cout << "Constructor called with parameter: " << num << std::endl;
}
};
class AnotherClass {
private:
MyClass myObj1;
MyClass myObj2;
public:
AnotherClass(int num1, int num2) : myObj2(num2), myObj1(num1) {
std::cout << "AnotherClass constructor called" << std::endl;
}
};
int main() {
AnotherClass obj(10, 20);
return 0;
}
在上面的代码中,我们有两个类:MyClass
和AnotherClass
。AnotherClass
中包含了两个MyClass
类型的成员变量myObj1
和myObj2
。
在AnotherClass
的构造函数中,我们使用了初始化列表来初始化成员变量。注意,初始化列表中的初始化顺序是按照成员变量在类中的声明顺序进行的。
根据C++标准的规定,成员变量的初始化顺序是按照它们在类中的声明顺序进行的。在上面的代码中,myObj1
先于myObj2
进行初始化,因为它在类中的声明顺序先于myObj2
。
输出结果是:
Constructor called with parameter: 10
Constructor called with parameter: 20
AnotherClass constructor called
可以看到,myObj1
先于myObj2
进行初始化,这证明了成员变量初始化的顺序按照它们在类中的声明顺序进行。
所以,在C++中,成员变量的初始化顺序是由它们在类中的声明顺序决定的,而不是由它们在初始化列表中的顺序决定的。