This question already has answers here:
Is there a difference between copy initialization and direct initialization?

(9个答案)


5年前关闭。




在我正在阅读的书中看到了这一点:
Rectangle r(Point(200,200));

是否与以下内容相同:
Rectangle r = Rectangle(Point(200,200));

最佳答案

在:

Rectangle r(Point(200,200));
您正在通过采用Rectangle对象的构造函数初始化Point对象。
在:
Rectangle r = Rectangle(Point(200,200));
您正在按上述方式构造一个Rectangle临时对象,然后将其传递给Rectangle的copy / move构造函数。
如果正确编写了复制构造函数,则生成的对象相同,但是从理论上讲,后者将再调用一个复制/移动构造函数。
根据§12.8/ 31,如果编译器决定取消副本,则情况并非如此:

如果采用Point的构造方法未标记为explicit,那么您也可以采用以下形式:
Rectangle r = Point(200,200);

关于c++ - 这是简短的变量声明吗? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31056036/

10-13 03:04