C++ Object Instantiation vs Assignment(C++ 对象实例化与赋值)
问题描述
这有什么区别:
TestClass t;
还有这个:
TestClass t = TestClass();
我预计第二个可能会调用构造函数两次,然后是 operator=,但它只调用了一次构造函数,就像第一个一样.
I expected that the second might call the constructor twice and then operator=, but instead it calls the constructor exactly once, just like the first.
推荐答案
TestClass t;
调用默认构造函数.
TestClass t = TestClass();
是一个复制初始化.它将调用 TestClass() 的默认构造函数,然后调用复制构造函数(理论上,复制受复制省略约束).此处不进行任何分配.
is a copy initialization. It will call the default constructor for TestClass() and then the copy constructor (theoretically, copying is subject to copy elision). No assignment takes place here.
还有直接初始化的概念:
TestClass t(TestClass());
如果你想使用赋值运算符:
If you want to use the assignment operator:
TestClass t;
TestClass s;
t = s;
这篇关于C++ 对象实例化与赋值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:C++ 对象实例化与赋值
基础教程推荐
- 提升 ASIO 流缓冲 2021-01-01
- 如何更改 SysDateTimePick32 或 CDateTimeCtrl 的背景颜色? 2022-01-01
- 与 CAS 的原子交换(使用 gcc 同步内置函数) 2022-01-01
- c++ STL设置差异 2022-01-01
- 随机插入/删除的综合向量与链表基准 2022-01-01
- 将不可复制的闭包对象传递给 std::function 参数 2021-01-01
- 如何部分禁用 cmake C/C++ 自定义编译器检查 2021-01-01
- C++:获取传递给函数的多维数组的行大小 2021-01-01
- 为什么我们不能使用“虚拟继承"?在 COM 中? 2022-01-01
- 如何在 C++ 中正确使用命名空间? 2022-01-01
