【问题标题】:What does const means in auto return declaration with trailing return type?带有尾随返回类型的自动返回声明中的 const 是什么意思?
【发布时间】:2017-08-25 21:46:39
【问题描述】:

我需要从函数返回一个 const 引用。这段代码做的事情:

auto test()->add_lvalue_reference<const int>::type
{
    static int i{50};
    return i;
}

int & i{test()}; // doesn't compile

但是这个看起来非常相似的 sn-p 给出了错误的结果:

auto const test()->add_lvalue_reference<int>::type
{
    static int i{50};
    return i;
}

int & i{test()}; // compiles thougth test() returned a const

我将关键字 const 从类型声明移到了返回声明。

一开始我以为,推导后函数签名变成了第二种情况:

int & const test(); // not valid - const qualifiers cannot be applied to int&

这不是一个有效的 c++。但是使用 auto 说明符可以编译。

所以我的问题是const 在具有自动尾随返回的函数返回类型中是什么意思?或者它可能被丢弃了?

【问题讨论】:

  • 恭喜,您发现了编译器错误。

标签: c++ c++11 auto trailing-return-type


【解决方案1】:
auto const test()->add_lvalue_reference<int>::type

这是格式错误的,请参阅[dcl.fct]/2(在使用 trailing-return-type 的情况下,“T 应该是单个 type-specifier em> auto")。

【讨论】:

  • 你是对的。我需要先在不同的编译器上进行测试。 Clang和msvc拒绝与gcc相反的编译。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-03
  • 1970-01-01
  • 2017-12-03
  • 1970-01-01
  • 2011-11-07
  • 2011-03-09
  • 2018-06-09
相关资源
最近更新 更多