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++ 对象实例化与赋值
基础教程推荐
- 在 C++ 中循环遍历所有 Lua 全局变量 2021-01-01
- 使用从字符串中提取的参数调用函数 2022-01-01
- 为什么语句不能出现在命名空间范围内? 2021-01-01
- 从 std::cin 读取密码 2021-01-01
- 为 C/C++ 中的项目的 makefile 生成依赖项 2022-01-01
- 如何在不破坏 vtbl 的情况下做相当于 memset(this, ...) 的操作? 2022-01-01
- 管理共享内存应该分配多少内存?(助推) 2022-12-07
- Windows Media Foundation 录制音频 2021-01-01
- 如何使图像调整大小以在 Qt 中缩放? 2021-01-01
- 如何“在 Finder 中显示"或“在资源管理器中显 2021-01-01