<分区>
我在 Visual C++ 17 编译器上有以下代码:
#include "stdafx.h"
class Foo {};
Foo FuncBar()
{
return Foo();
}
int main()
{
Foo &myFoo = FuncBar();
}
通常 IIRC,将临时对象分配给左值应该是非法的。这里我返回一个临时的 Foo() 并将它绑定(bind)到一个左值引用。 然而这段代码编译甚至运行良好。为什么允许这样做?
标签 c++ visual-c++ lvalue
<分区>
我在 Visual C++ 17 编译器上有以下代码:
#include "stdafx.h"
class Foo {};
Foo FuncBar()
{
return Foo();
}
int main()
{
Foo &myFoo = FuncBar();
}
通常 IIRC,将临时对象分配给左值应该是非法的。这里我返回一个临时的 Foo() 并将它绑定(bind)到一个左值引用。 然而这段代码编译甚至运行良好。为什么允许这样做?
最佳答案
它是 Microsoft C++ 扩展。您可以使用/Za 标志使编译失败。
关于c++ - 为什么 Visual C++ 编译器允许对左值引用进行临时赋值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46884761/