我尝试创建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;
答案 0 :(得分:4)
MyNum one(1)
执行direct initalization,MyNum two = 2;
执行copy initialization。它们在这里具有相同的效果,即由构造函数MyNum::MyNum(int)
初始化对象。
如果将构造函数标记为explicit
,则第二个构造函数格式错误。
复制初始化比直接初始化要宽松:显式构造函数不会转换构造函数,因此不会考虑进行复制初始化。