【问题标题】:Assignment to non-const reference [duplicate]分配给非常量引用[重复]
【发布时间】:2017-04-08 22:48:50
【问题描述】:

VS2015 Update 3 编译这个没有错误也没有警告。然而,我的印象是临时变量只能绑定到 const 引用。这是不符合标准还是我误解了什么?

struct Foo {};
Foo Func6() { return Foo(); }

TEST(Arguments, NonConstReference)
{
   Foo& bob = Func6();
}

编辑

marcinj 链接的问题是同一个问题,尽管该问题并非专门针对 VS2015,并且在我输入此问题时未找到。

我已经使用 /W4 进行了测试,以查看是否收到警告但没有看到,但再次测试我发现现在可以了。当打开项目属性以调整设置时,VS2015 习惯于显示与当前选择的构建配置不同的构建配置的属性对话框集,这是一种最无用的行为,已经让我多次感到困惑,(我肯定会继续这样做)。

正如其他问题中提到的,使用禁用语言扩展 (/Za) 会导致此错误,但不幸的是,这不是一个可用的解决方案,因为 Microsoft 自己的平台标头将无法编译。

【问题讨论】:

    标签: c++ visual-studio-2015


    【解决方案1】:

    MSVC 编译器有一个非标准扩展,默认启用,允许临时绑定到非const 引用。要禁用此功能,请使用 command-line option /Za 或相应的项目属性。

    【讨论】:

    • 从来不明白这个的用途。
    • @GillBates 当你有右值引用时就更没用了!
    • @GuillaumeRacicot 当然,这个扩展比右值引用早了至少十年,所以我认为这是不公平的比较。
    • @Angew 虽然这是我们在这里讨论的 VS2015 编译器,所以 MS 有很多机会修复它。
    • 将此标记为答案,但值得注意的是,使用 /Za 会导致 MS 自己的平台标头无法编译,因此这很少是有用的解决方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-09
    • 1970-01-01
    相关资源
    最近更新 更多