char f1();
void f2(char&);
struct A {};
A f3();
void f4(A&);
int main()
{
f2(f1()); // error C2664. This is as expected.
f4(f3()); // OK! Why???
}
我已经了解到,在C++中,非const引用参数无法绑定到临时对象; 上面的代码
f2(f1())
会触发预期的错误。然而,为什么相同的规则不适用于代码行
f4(f3())
?PS:我的编译器是VC++2013。 即使我注释掉
f2(f1())
这一行,包含 f4(f3())
的代码也会编译而没有任何错误或警告。更新: MSDN 表示:
以前版本的Visual C ++中,非const引用可以绑定到临时对象。现在,临时对象只能绑定到const引用。
所以我认为这是VC++的一个bug。我已经向VC++团队提交了一个bug报告。
msvc const reference temporary
即可。 - yngccc