二进制表达式中的 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
}
表达式 1 和 2 均被 VC 接受。表达式 2 被 GCC 拒绝,并显示"没有可行的重载 '+='"。但是,对于引用常量对象的运算符,可以接受这样的表达式:
const A& operator+=( const A& a, int i ) { return a; }
为什么 GCC 强制此临时在运算符上下文中保持不变,而不在方法调用上下文中,这是正确的行为吗?
A();
创建临时。
A& operator+=( A& a, int i ) { return a; }
临时不能绑定到reference
。MSVC 接受这一点,因为它是非标准扩展。查看右值到左值转换Visual Studio
相关文章:
- gcc和clang在表达式是否为常量求值的问题上存在分歧
- constexpr 函数的常量引用参数:gcc/msvc vs clang/icc
- 使用函数参数作为常量表达式的一部分 - gcc vs clang
- 为什么 GCC 拒绝复制赋值操作中的常量引用
- GCC 模板推导消除了常量错误
- 避免或警告在 GCC 中从常量字符* 隐式转换为布尔值
- 将函数声明为 GCC 纯函数或常量函数的效果(当它不是时)
- gcc 是否将非常量表达式函数的内置视为常量表达式
- GCC可以优化具有编译时常量变量的类的方法吗
- GCC C++11 对用户定义的常量和模板参数包的限制
- 二进制表达式中的 GCC 常量临时
- 非常量引用类型的无效初始化中出错.在Linux操作系统中使用c++代码.GCC编译器
- 有没有办法不警告 gcc 中开关缺少"COUNT"枚举常量?
- GCC 3.3 具有类似于 GCC 3.4 的静态常量变量
- GCC 4.7.1 泛量常量表达式问题与重载
- 在类嵌套静态常量成员变量初始化 Clang vs GCC 哪个编译器是正确的
- GCC 错误,同时对常量无符号长字节使用代码块
- Linux gcc和Windows Visual Studio处理静态常量的区别
- GCC 4.4.3常量表达式错误的偏移.我应该如何解决这个问题
- 如何使GCC的长整型常量警告静音