为什么Visual C++编译器允许将临时变量赋值给左值引用?

3

我在Visual C++ 17编译器上有以下代码:

#include "stdafx.h"
class Foo {};

Foo FuncBar()
{
    return Foo();
}
int main()
{
    Foo &myFoo = FuncBar();
}

通常情况下,将临时变量分配给左值应该是非法的。在这里,我返回了一个临时的Foo()并将其绑定到一个左值引用上。 然而,这段代码可以编译并且运行良好。为什么会允许这样做呢?

1
{btsdaf} - M.M
{btsdaf} - Onur Gumus
{btsdaf} - DeiDei
{btsdaf} - Richard Hodges
{btsdaf} - Onur Gumus
显示剩余2条评论
1个回答

0

这是一个微软C++扩展。您可以使用/Za标志使编译失败。


{btsdaf} - M.M
{btsdaf} - Onur Gumus
@ M. M 当然,windows.h将不再编译。在https://learn.microsoft.com/de-de/cpp/build/reference/za-ze-disable-language-extensions上,微软建议您只在计划可移植性时使用此选项。 - Jodocus
2
{btsdaf} - Onur Gumus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接