繁体   English   中英

分配操作员是否“需要”返回?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM