Foo&foo = Bar()是合法的还是编译器问题

Loo*_*oom 1 c++ reference visual-c++ visual-c++-2010

struct Foo {};
struct Bar : Foo {};

Foo &foo = Bar(); // without const
Run Code Online (Sandbox Code Playgroud)

正如在这个问题的答案和评论中写的那样,我无法为引用分配右值.但是,我可以编译此代码(MSVC++ 2010)而不会出现错误或警告.这是我的编译器的已知问题吗?

Ker*_* SB 10

临时值不会绑定到非常量引用.这就是语言设计的方式.

虽然原则上没有任何技术障碍允许不间断地访问临时设备,但这几乎总是设计不佳,并且通常在逻辑上是错误的,因此标准不允许这样做.如果您觉得需要修改临时,您应该重新考虑为什么要这样做.