[英]Are assignment operators “required” to return?
根据C ++标准,我可以确定内置变量的赋值运算符返回(原始值)吗?
或者这个实现是依赖的(但是只是让最流行的编译器实现了这个)?
是的,保证:
5.17赋值和复合赋值运算符
赋值运算符(=)和复合赋值运算符都是从右到左分组。 所有都需要一个可修改的左值作为左操作数,并返回一个左值操作数的左值 。
这适用于内置类型。 使用用户定义的类型,它可以返回任何内容。
这取决于你所说的“原始价值”。
例如:
#include <iostream>
int main() {
int i;
std::cout << (i = 1.9) << "\n";
}
打印1
。 赋值表达式产生LHS的新值(即1),而不是RHS的“原始值”(1.9)。
我不确定这是不是你要问的问题。
根据C ++标准,我可以确定构建变量的赋值运算符返回(原始值)吗?
编辑我现在明白了,我想。 是:您可以确定内置类型在operator=, *=, /=, -=, +=, ^=, ~=, &= and |=
之后通过引用返回原始值。
“对于构建变量”对我来说有点神秘。
然而,
X makeX() { return X(); } // must have accessible copy constructor // ... X x; x = makeX(); // ... _and_ assignment operator
或者这个实现是依赖的
它不应该是( 编辑看到UncleBens标准参考 )
是。 保证预定义类型的所有分配和增强分配都以这种方式工作。
但请注意,用户定义的类型分配或增强的分配可以改为返回void
。 这不是一个好的做法,不应该这样做(它会给用户带来惊喜效果 - 这不是一件好事),但从技术上来说这是可能的,所以如果你正在编写一个模板库,你不应该做出这个假设,除非它真的很重要为了你。
是。 操作符语义将无法正常工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.