gpt4 book ai didi

c++ - 为什么复制赋值运算符必须返回引用/常量引用?

转载 作者:IT老高 更新时间:2023-10-28 13:21:21 25 4
gpt4 key购买 nike

在 C++ 中,我不清楚从复制赋值运算符返回引用的概念。为什么复制赋值运算符不能返回新对象的拷贝?另外,如果我有类A,还有以下:

A a1(param);
A a2 = a1;
A a3;

a3 = a2; //<--- this is the problematic line

operator=定义如下:

A A::operator=(const A& a)
{
if (this == &a)
{
return *this;
}
param = a.param;
return *this;
}

最佳答案

严格来说,复制赋值运算符的结果不需要返回引用,但为了模仿 C++ 编译器使用的默认行为,它应该返回对分配给的对象的非常量引用(一个隐式生成的复制赋值运算符将返回一个非常量引用 - C++03:12.8/10)。我已经看到相当多的代码从复制分配重载中返回 void ,我不记得什么时候导致了严重的问题。例如,返回 void 将阻止用户进行“赋值链”(a = b = c;),并阻止在测试表达式中使用赋值结果。虽然这种代码绝不是闻所未闻的,但我也不认为它特别常见——尤其是对于非原始类型(除非类的接口(interface)打算用于这些类型的测试,例如 iostream)。

我不建议您这样做,只是指出这是允许的,而且似乎不会引起很多问题。

这些其他 SO 问题是相关的(可能不完全是骗人的),其中包含您可能感兴趣的信息/意见。

关于c++ - 为什么复制赋值运算符必须返回引用/常量引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3105798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com