可能是重复问题:
在C++中,复制初始化和赋值初始化有区别吗?
我是C++的新手,很少看到人们使用这种语法来声明和初始化变量:
int x(1);
我尝试过,编译器没有报错,输出结果与int x=1相同,它们实际上是一样的吗?
非常感谢你们。
可能是重复问题:
在C++中,复制初始化和赋值初始化有区别吗?
我是C++的新手,很少看到人们使用这种语法来声明和初始化变量:
int x(1);
我尝试过,编译器没有报错,输出结果与int x=1相同,它们实际上是一样的吗?
非常感谢你们。
是的,对于内置类型而言,int x = 1;
和 int x(1);
是相同的。
当构造类类型对象时,这两种不同的初始化语法略有不同。
Obj x(y);
这是直接初始化,它指示编译器查找一个可以接受y
或可以隐式转换为y
的构造函数,并使用此构造函数初始化x。
Obj x = y;
这是复制初始化,指导编译器通过转换y
来创建一个临时的Obj
对象,并使用Obj
的复制构造函数初始化x
。
复制初始化在y
的类型与x
相同时等同于直接初始化。
对于复制初始化,由于使用的临时对象是隐式转换的结果,因此标记为explicit
的构造函数不会被考虑。构造类型的复制构造函数必须可访问,但编译器可能将复制本身作为优化而消除。
对于 POD 类型,这两个语句是相同的。
我不是C++专家,但如果它产生相同的结果,那有什么关系呢?我猜如果你真的感兴趣,你可以编译(但不汇编)你的代码,看看差异在哪里。
编辑:正如其他地方提到的,对于内置类型来说,它们确实是相同的。