这是一个简短的变量声明吗
Is this a short hand variable declaration?
在我正在读的一本书中看到了这一点:
Rectangle r(Point(200,200));
这和一样吗
Rectangle r = Rectangle(Point(200,200));
In:
Rectangle r(Point(200,200));
您正在通过采用Point
对象的构造函数初始化Rectangle
对象。
In:
Rectangle r = Rectangle(Point(200,200));
您正在如上所述构造一个Rectangle
临时对象,然后将其传递给Rectangle
的复制/移动构造函数。
如果复制构造函数编写正确,那么生成的对象是相同的,但理论上在后者中会调用一个复制/移动构造函数。
根据§12.8/31:,如果编译器决定删除副本,则情况并非如此
当满足某些条件时,允许实现省略类对象的复制/移动构造,即使为复制/移动操作选择的构造函数和/或对象的析构函数有副作用。在这种情况下,实现将省略的复制/移动操作的源和目标视为引用同一对象的两种更简单的方式,并且该对象的销毁发生在两个对象在没有优化的情况下被销毁的较晚时间。122这种复制/移动操作的省略,称为复制省略,在以下情况下允许(可以组合以消除多个副本):
[…]
- 当尚未绑定到引用(12.2)的临时类对象将被复制/移动到具有相同cv不合格类型的类对象时,可以通过将临时对象直接构建到被省略的复制/移动的目标中来省略复制/移动操作
[…]
如果采用Point
的构造函数没有标记为explicit
,那么您也可以使用以下形式:
Rectangle r = Point(200,200);
相关文章:
- 在将变量声明为引用时,堆在释放后使用
- 静态变量声明和定义
- 在变量声明中使用 for 循环
- 向量索引变量声明(size_t 或 std::vector<DATATYPE>::size_type)
- C++ 类型类的变量声明不命名类型?
- 将本地 OpenCV Mat 变量声明为静态以防止重新分配
- std::enable_if 更改成员 *变量* 声明/类型
- 在C++中,变量声明左侧的大括号是什么意思?
- 将变量声明为全局变量,然后声明为局部变量 -Shadowing-
- 命名空间内C++变量声明
- 将静态全局变量声明为内联有什么意义吗?
- 如何将一个变量声明为另一个变量的值
- 如何将迭代器变量声明为私有成员变量
- 没有变量声明为函数,但错误:二进制表达式的操作数无效
- 有没有人有书面证据来保证函数中参数的定义方式与普通变量声明相同?
- ClangTool 如何获取变量声明中模板参数的位置?
- 标准与显式自动推导变量声明
- C 静态变量声明怪异链接器错误
- 如何为数组成员变量声明 getter/setter
- 可视C++变量声明