C++ 如何在C+中初始化直接到对象+;?
我真的不知道什么问题/标题可以解释我的问题。 我只是给你们举个例子 这是怎么回事?编译器是否使用初始值设定项列表自动调用参数构造函数C++ 如何在C+中初始化直接到对象+;?,c++,c++11,C++,C++11,我真的不知道什么问题/标题可以解释我的问题。 我只是给你们举个例子 这是怎么回事?编译器是否使用初始值设定项列表自动调用参数构造函数 #include <iostream> class A { public: int k; }; int main(){ A obj={2}; std::cout << obj.k; // output 2; } #包括 甲级{ 公众: int k; }; int main(){ A obj={2};
#include <iostream>
class A {
public:
int k;
};
int main(){
A obj={2};
std::cout << obj.k; // output 2;
}
#包括
甲级{
公众:
int k;
};
int main(){
A obj={2};
这就是所谓的
当我们没有明确定义构造函数时,编译器会自动假定A obj={firstField,SecondField,….};
表示调用默认构造函数,然后在{…}
中使用给定值初始化字段
对
但是当你定义一个构造器,并执行a obj={…}
时,那就是。@zenith很抱歉键入错误..是的obj.k
我只想问一下`a obj={2};`是如何工作的?zenith我能说,编译器在聚合初始化中隐式创建初始值设定项列表吗?如果是通过“初始值设定项列表”您指的是不是不是由编译器创建的成员初始值设定项列表。公共非静态成员只是从带括号的init列表中的初始值设定项初始化的。
#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?
}