【问题标题】:Why Visual C++ compiler allows temporary assignments to lvalue references? [duplicate]为什么 Visual C++ 编译器允许对左值引用进行临时赋值? [复制]
【发布时间】:2018-04-03 17:31:29
【问题描述】:

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

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

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

通常 IIRC,将临时变量分配给左值应该是非法的。在这里,我返回一个临时 Foo() 并将其绑定到一个左值引用。 但是,此代码可以编译,甚至可以正常运行。为什么允许这样做?

【问题讨论】:

  • 因为微软认为允许它是个好主意......实际上没有任何其他答案
  • @M.M 是微软在某处记录的吗?
  • 他们认为 Xamarin 是个好主意,所以可信度值得怀疑......
  • @OnurGumus 是的,你试过搜索他们的文档吗?
  • @M.M 我找到了 Microsoft Extensions 的文档。但是看不到这种特定的行为被记录在案。但是设置 /Za 肯定会“解决”这个问题。

标签: c++ visual-c++ lvalue


【解决方案1】:

它是 Microsoft C++ 扩展。您可以使用 /Za 标志使编译失败。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-22
  • 1970-01-01
  • 2019-02-28
  • 1970-01-01
  • 2019-10-11
  • 1970-01-01
相关资源
最近更新 更多