()和=在创建类实例时有什么区别?

时间:2020-07-27 06:59:38

标签: c++ class object constructor copy-constructor

我尝试创建2个此类的对象

#include <iostream> 
using namespace std;

class MyNum
{
private: 
    int m_num;
public:
    MyNum(int num) : m_num{ num }
    {
    }
};

int main()
{
    MyNum one(1);
    MyNum two = 2;
}

这两行有什么区别

MyNum one(1);
MyNum two = 2;

1 个答案:

答案 0 :(得分:4)

MyNum one(1)执行direct initalizationMyNum two = 2;执行copy initialization。它们在这里具有相同的效果,即由构造函数MyNum::MyNum(int)初始化对象。

如果将构造函数标记为explicit,则第二个构造函数格式错误。

复制初始化比直接初始化要宽松:显式构造函数不会转换构造函数,因此不会考虑进行复制初始化。