字符串的decltype和const引用返回类型
decltype and const reference return types for strings
给定类中的数据成员_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 &;
它按照我想要的方式编译和行为(即,本质上返回一个常量字符串&)
我觉得这很奇怪。这可能是gcc编译器中的一个错误,还是这两个声明之间有一些根本的区别?
decltype(*_value)正确地计算为basic_string&它是find,所以我想我可以在它前面加一个const,它应该是find的,但似乎混淆了编译器。。。
请注意,我的意图基本上是让函数返回对unique_ptr所指向的类型的const引用。
这似乎在gcc 5.0
中得到了修复,我们可以使用wandbox在线测试,但正如T.C.所指出的,当应用于参考时,会忽略来自C++11标准草案8.3.2
:的常量
Cv限定的引用格式不正确,除非引入了Cv限定符通过使用typedef名称(7.1.3,14.1)或decltype说明符(7.1.6.2),在这种情况下,cv限定符被忽略。
相关文章:
- 将返回类型专用化为 void 或 const 左值引用
- 对于具有引用返回类型的搜索算法,默认返回值应该是什么?
- 通过引用传递参数;函数返回类型是否必须为 VOID?
- 将成员函数的返回类型引用到C++中的自定义类
- 具有引用返回类型的重写方法上的协变返回类型无效
- 直接在 C++ 中将值分配给引用返回类型
- 为什么作为返回类型的右值引用不能初始化非常量引用?
- std::function 中不允许引用返回类型吗?
- 为什么类的赋值运算符的返回类型通常是非常量(而不是常量)引用?
- 自动返回类型不推断引用
- 从具有引用返回类型的函数返回什么
- 字符串和引用返回类型 C++?
- 模板引用折叠正在删除常量引用返回类型的cv限定符
- C++,从具有引用返回类型的函数返回什么以指示错误
- 字符串的decltype和const引用返回类型
- 类模板和引用返回类型
- 我可以在引用返回类型中返回指针吗
- 指针与引用返回类型
- 为什么我不能用非引用返回类型定义运算符=?
- c++中引用返回类型和指针返回类型有什么区别?