【问题标题】:decltype and const reference return types for strings字符串的 decltype 和 const 引用返回类型
【发布时间】:2015-03-17 20:56:00
【问题描述】:

给定一个类中的数据成员_value,定义如下:

unique_ptr<std::string> _value = nullptr;

以下内容无法编译。

auto getValue() const -> const decltype(*_value) &

编译器返回此错误:

‘const’限定符不能应用于‘std::basic_string&’

但是,如果我这样声明函数:

auto getValue() const -> const remove_reference<decltype(*_value)>::type &;

它按照我的意愿编译和运行(即,本质上返回一个 const 字符串&)

我觉得这很奇怪。这可能是 gcc 编译器中的错误,还是这两个声明之间存在一些根本区别?

decltype(*_value) 正确计算为 basic_string& 这是 find 所以我想我可以在它前面贴一个 const 并且它应该是 find 但似乎混淆了编译器......

请注意,我的意图基本上是让函数返回对 unique_ptr 指向的类型的 const 引用。

【问题讨论】:

  • GCC 在拒绝您的第一个版本时出现问题(该错误已在 GCC 主干上修复),但该版本也没有执行您想要的操作(const 应用于参考type,被忽略,引用折叠后函数返回std::string&amp;)。

标签: c++ c++11 auto decltype


【解决方案1】:

看起来这个问题已在 gcc 5.0 中修复,我们可以使用 wandbox 在线测试,但使用 T.C.注意 const 在应用于引用时被忽略,来自 C++11 标准草案8.3.2

Cv 限定的引用格式不正确,除非引入 cv 限定符 通过使用 typedef-name (7.1.3, 14.1) 或 decltype-specifier (7.1.6.2),在这种情况下是 cv-qualifiers 被忽略。

【讨论】:

    猜你喜欢
    • 2011-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-30
    • 2017-08-02
    • 1970-01-01
    相关资源
    最近更新 更多