如何初始化Direct到对象在C ++中工作?

时间:2015-12-16 11:41:50

标签: c++ c++11

我真的不知道什么问题/标题可以解释我的问题。 我只想给你看一个例子。

这是如何运作的?编译器是否自动使用初始化列表调用参数构造函数?

#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};

调用该构造函数

1 个答案:

答案 0 :(得分:5)

这称为aggregate initialization

  

当我们没有显式定义构造函数时,编译器自动假设A obj={firstField,SecondField,....};表示调用默认构造函数,然后在{....}

中使用给定值初始化字段

正确。

但是当你定义一个构造函数并执行A obj = {...} copy-list-initialization时。