我真的不知道什么问题/标题可以解释我的问题。 我只想给你看一个例子。
这是如何运作的?编译器是否自动使用初始化列表调用参数构造函数?
#include <iostream>
class A {
public:
int k;
};
int main(){
A obj={2};
std::cout << obj.k; // output 2;
}
我很困惑,编译器会自动调用参数化构造函数。然后我试着去测试。
#include <iostream>
class A {
public:
int k;
A(int a){
std::cout << "Para A" << std::endl;
}
};
int main(){
A obj={2}; // error in C++98 but works in C++11 and call Para A.
std::cout << obj.k; // Garbage value why?
}
之后我认为,当我们没有显式定义构造函数时,编译器会自动假设A obj={firstField,SecondField,....};
表示调用默认构造函数,然后使用{....}
中的给定值初始化字段。所以,问题如果没有这个逻辑,我是对的吗? A obj={2};
IN C ++ 11
如果参数化构造函数已定义,则可以通过此A obj={values};
答案 0 :(得分:5)
当我们没有显式定义构造函数时,编译器自动假设
中使用给定值初始化字段A obj={firstField,SecondField,....};
表示调用默认构造函数,然后在{....}
正确。
但是当你定义一个构造函数并执行A obj = {...}
copy-list-initialization时。