有关 const decltype(x)& 的问题
Issues concerning const decltype(x)&
请考虑以下代码:
int a = 1;
const int& b = a;
std::cout << std::is_same<const decltype(b)&, const int&>();
它在 clang 3.5 上编译,而 GCC 4.9 给出以下错误:
error: 'const' qualifiers cannot be applied to 'const int&'
根据标准,哪一个是正确的?我的猜测是GCC符合标准,就像你不能做int& const b = a;
一样。
我相信
代码是有效的,两种类型是相同的。
[dcl.ref]/1 说:
Cv 限定引用的格式不正确,除非通过使用 typedef-name (7.1.3, 14.1( 或 decltype-specifier (7.1.6.2( 引入 cv 限定符,在这种情况下,将忽略 cv 限定符。
由于您是通过 decltype 说明符引入第一个const
,因此它将被忽略,并且您的第一个类型等效于 decltype(b)&
。
现在 [dcl.ref]/6 说:
如果 typedef-name (7.1.3, 14.1( 或 decltype-specifier (7.1.6.2( 表示对类型
T
的引用的类型TR
,则尝试创建类型"对 cvTR
的左值引用"将创建类型"对T
的左值引用" [...]
您的 decltype-specifier 表示类型"对const int
的引用",并且您正在尝试创建左值引用,因此您最终会得到对 const int
的左值引用。
相关文章:
- 违反const正确性:我应该现实地期待什么问题
- 关于重载 -> 运算符中 const 关键字的特定位置的问题
- 从const ptr*转换为ptr*时出现问题
- 语法问题:"char [5] const &"是什么意思?
- 使用 const double* const 作为模板参数 - 代码性能问题
- 当对象被其他对象引用时,关于 const 限定符的微妙问题
- char,const char*阵列问题,用于mqtt client.publish
- 汇编问题试图使用qobject_cast进行const指针
- 将 API 函数参数从 'char *' 更改为"const char *"有哪些潜在问题?
- 使用 LLVM 从 const void * 转换为模板类型时出现问题
- const int&performance 问题
- 有关 const decltype(x)& 的问题
- const void*对象初始化问题C++
- 交换与使用std::map[]运算符赋值(const问题)
- 错误 C2280;运算符 =(const Employee &) 在执行 employees.erase() 时出现问题
- 调用接受三个参数的函数出现问题,其中一个是 int const
- 如何解决此问题:从 'const char*' 到"const uint8_t* 的转换无效
- 在将字符串从std::string转换为const char *时出现数据丢失问题
- 如何使用顶级const来解决此问题
- 在const函数中修改私有int存在问题