C++ 对象实例化与赋值 [英] C++ Object Instantiation vs Assignment

查看:30
本文介绍了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++ 对象实例化与赋值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆