const 在具有尾随返回类型的自动退货声明中是什么意思

What does const means in auto return declaration with trailing return type?

本文关键字:声明 意思 是什么 返回类型 const      更新时间:2023-10-16

我需要从函数返回一个常量引用。此代码执行以下操作:

auto test()->add_lvalue_reference<const int>::type
{
    static int i{50};
    return i;
}
int & i{test()}; // doesn't compile

但是这个看起来非常相似的片段给出了不正确的结果:

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在具有自动尾随返回的函数返回类型中是什么意思?或者也许它被丢弃了?

auto const test()->add_lvalue_reference<int>::type

这是格式不正确的,请参见 [dcl.fct]/2(在使用尾随返回类型的情况下,"T应是单一类型说明符auto"(。