繁体   English   中英

GCC常量临时二进制表达式

[英]GCC constant temporary in binary expression

考虑以下代码:

struct A {
    A& add( int i ) { return *this; }
};

A& operator+=( A& a, int i ) { return a; }

void f() {
    A a1 = A().add( 1 ); // expr 1
    A a2 = A() += 1;     // expr 2
}

VC接受表达式1和2。 GCC以“无可行的重载'+ ='”拒绝表达式2。 但是,这样的表达式对于引用常量对象的运算符是可接受的:

const A& operator+=( const A& a, int i ) { return a; }

为什么GCC强制在操作员上下文中将此临时变量保持不变,而在方法调用上下文中不在环境中,则此行为正确吗?

A();

创建临时的。

A& operator+=( A& a, int i ) { return a; }

临时不能绑定到reference MSVC接受这一点,因为它是非标准扩展。 从右值到左值的转换Visual Studio

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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