gpt4 book ai didi

c++ - 赋值运算符的返回类型

转载 作者:IT老高 更新时间:2023-10-28 22:19:17 33 4
gpt4 key购买 nike

在定义赋值运算符时,它总是如下所示:

class X {...};

X& X::operator=(...whatever...);

也就是说,它的返回类型是“对 X 的引用”。这里,参数( ...whatever... )可以是 X& , const X& , 只是 X使用 copy-and-swap idiom 时,或任何其他类型。

everyone recommends returning a non-const reference to X 似乎很奇怪,与参数无关。这明确地允许像 (a = b).clear() 这样的表达式。 ,这应该是好的。

我有不同的意见,我想禁止 (x=y).clear 这样的表达方式, (x=y)=z , 甚至 x=y=z在我的代码中。我的想法是,这些表达式在一行代码上做的事情太复杂了。所以我决定让我的赋值运算符返回 void :

void X::operator=(X) {...}
void X::operator=(int) {...}

这有什么负面影响? (除了看起来和平时不一样)

我的 X 类可以与标准容器一起使用吗(例如 std::vector<X> )?

我正在使用 C++03(如果重要的话)。

最佳答案

你的类(class)不符合 CopyAssignable概念(第 17.6.3.1 节),因此标准不再保证与需要此功能的标准容器一起使用(例如 std::vector 需要此用于 insert 操作)。

除此之外,这种行为不是惯用的,使用您的代码的程序员会感到惊讶。如果您想禁止链接,请考虑添加一个命名函数来执行分配。

只是不要试图以这种微妙的方式改变惯用运算符的行为。它会使您的代码更难阅读和维护。

关于c++ - 赋值运算符的返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19090023/

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