c++ - 从方法中按值返回类类型的变量

标签 c++ copy return-value copy-constructor

先生们,美好的一天! 让我们考虑一下代码:

class Test
{
    int a;
public:
Test(){}
Test( Test& t){cout<<"hello\n";} //copy constructor
Test foo() { return Test();}




};

int main()
{
    Test t;


}

问题是给定的代码没有编译。如果我们删除复制构造函数,一切都会顺利进行。问题是什么?添加 const --Test(const Test& t) 解决了问题,但我不明白为什么。有人可以解释一下吗?谢谢!

最佳答案

Test( Test& t){cout<<"hello\n";}

是的,这一个复制构造函数。

不过,我们通常是这样写的:

Test(const Test& t){cout<<"hello\n";}

那是因为这种方式更有用;这是我们可以从“临时”(例如您的表达式 Test())复制构造 Test 的唯一方法,因为只有 references-to-const (和右值引用)可以绑定(bind)到临时对象。

与下面的问题相同:

      int& r1 = 3;    // :(
const int& r2 = 3;    // :D

或:

      int& r1 = f();  // :(
const int& r2 = f();  // :D

关于c++ - 从方法中按值返回类类型的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28242521/

相关文章:

python - 为什么我的 C++ ZeroMQ 订阅者收不到任何数据?

python - 为什么 'return self' 返回 None?

c++ - 嵌套迭代器和接口(interface)中的“无效协变返回类型”错误

c++ - CUDA:获取 3D 表面的子集

python - 在Python中搜索带有扩展名的文件并复制到目录?

c++ - C++逐行复制

tfs 将文件夹从一个团队项目复制到另一个

c++ - 不要放弃你的内部? [C++]

c - C 上的返回矩阵

c++ - 从 MySQL 检索时间戳数据到 C++