分配运算符是否"required"返回?

Are assignment operators "required" to return?

本文关键字:返回 required 分配 是否 运算符      更新时间:2023-10-16

根据c++标准,我可以确定内置变量的赋值操作符返回(原始值)吗?

或者这个实现是依赖的(但是大多数流行的编译器都实现了这个)?

是的,这是保证的:

5.17赋值和复合赋值操作符

赋值操作符(=)和复合赋值操作符all组合在一起从右到左。它们都需要一个可修改的左值作为左操作数返回指向左操作数的左值。

这适用于内置类型。对于用户定义的类型,它可以返回任何东西。

这取决于你对"原始值"的定义。

例如:

#include <iostream>
int main() {
    int i;
    std::cout << (i = 1.9) << "n";
}

打印1。赋值表达式产生LHS的新值(即1),而不是RHS的"原始值"(1.9)。

我不确定那是不是你想问的。

根据c++标准,我可以确定内建变量的赋值操作符返回(原始值)吗?

编辑我想我现在明白了。可以:您可以确保内置类型在operator=, *=, /=, -=, +=, ^=, ~=, &= and |=之后通过引用返回原始值

"For build in variables"对我来说有点神秘。然而,

X makeX()
{
    return X();
} // must have accessible copy constructor
// ...
X x;
x = makeX(); // ... _and_ assignment operator

还是这个实现依赖于

它应该不是 (edit参见UncleBens的标准参考)

是。可以保证预定义类型上的所有赋值和增宽赋值都以这种方式工作。

但是请注意,用户定义的类型赋值或增强赋值可以返回void。这不是一种好的做法,也不应该这样做(这会给用户带来意想不到的效果——这不是一件好事),但从技术上讲,这是可能的,因此,如果您正在编写模板库,则不应该做出这样的假设,除非它对您非常重要。

是。否则操作符语义将无法工作。