在定义赋值运算符时,它总是如下所示:
class X {...};
X& X::operator=(...whatever...);
也就是说,它具有返回类型“对 X 的引用”。在这里,参数 ( ...whatever...
) 可以是X&
, const X&
, 仅X
在使用复制和交换习语时 , 或任何其他类型。
不管参数如何,每个人都建议返回对 的非常量引用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(如果重要的话)。