Mis*_*tyD 2 c++ visual-studio-2012
我目前正在使用 VS2012 并且期望此代码中的语句 B 失败,因为我们正在将一个临时值传递给 foo 类中的赋值运算符方法。令人惊讶的是,这并没有失败,为什么?语句 A 失败,这很好。为什么语句 B 不失败?
struct foo
{
int a;
foo& operator=(foo& that)
{
a=12;
return *this;
}
};
int main()
{
const foo a;
foo b;
//b = a; //statement A
b = foo(); //Statement B
}
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为启用了语言扩展的 VC++ 不符合标准,并且允许将非常量左值引用绑定到临时引用。
在中添加默认构造函数后foo,GCC 和 Clang 都会发出相应的错误消息:
main.cpp:18:7: 错误:没有可行的重载“=”
Run Code Online (Sandbox Code Playgroud)b = foo(); //Statement B ~ ^ ~~~~~main.cpp:6:10:注意:候选函数不可行:第一个参数需要左值
Run Code Online (Sandbox Code Playgroud)foo& operator=(foo&) ^
| 归档时间: |
|
| 查看次数: |
570 次 |
| 最近记录: |