c++ - 为什么别名 int& 允许创建非函数类型 const (int&)?
问题描述
通常在使用常量到引用时会出现编译器错误,但在使用别名或使用模板时不会。为什么会这样?
int a = 5;
using my_t = int&;
my_t const b = a; //#1 OK
int& const c = a; //#2 Compiler error
通过最新的 clang 编译器(x86-64 clang(实验性 P1144))运行时,#1 给了我警告:
[x86-64 clang (experimental P1144) #1] 警告:引用类型 'my_t' (aka 'int &') 上的 'const' 限定符没有效果 [-Wignored-qualifiers]
和#2给我错误:
[x86-64 clang (experimental P1144) #1] 错误:'const' 限定符可能不适用于引用。
x86-64 gcc (trunk) 给 #2 一个错误,但给 #1 一个错误。
解决方案
这只是规则。来自[dcl.ref]/1:
cv 限定的引用格式错误,除非通过使用typedef-name ([dcl.typedef], [temp.param]) 或decltype-specifier引入cv 限定符,在这种情况下 cv 限定符是忽略。
它的存在是为了更容易编码。int& const
显然是错误的,允许它没有任何好处。T const
可能对某些T
s 有效,因此拒绝它会非常有害 - 如果您允许它并在这些情况下忽略无效的 cv 限定符,则编码会更容易。
推荐阅读
- python - Python 在几个 csv 文件上运行脚本
- swift - Firebase 自动屏幕报告不起作用
- php - Laravel 中不存在方法 Illuminate\Support\Collection::save
- c++ - 通过指针打印二维数组时获取垃圾值的原因
- monitoring - 如何将两个 APM 数据合并到一个视图中
- python - 尝试加载泡菜文件 - AttributeError:无法获取属性“个人”
我正在尝试
tradeopt.pars
使用以下代码打开一个名为 pickle 的文件:import os import lzma import pickle import sys from shutil import rmtree def main(): wk_dir
- r - 向未迭代创建的汇总表添加差异
- r - 对每一列应用一个函数
- c - MinGW CMake make googletest 出现错误但没有命中
- php - 网关超时 webfoersterei / domain-bestellsystem-api-client