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? 
}