请考虑以下代码:
int a = 1;
/* Note that const is on the right here */
int & const b = a;
当然,它没有任何意义(因为引用就像非null 常量指针),但是此代码可以很好地编译MSVC 2015和MSVC 2017.GCC和Clang无法按预期编译它:
这是打算的吗?这是一个错误吗?错误:'const'限定符不能应用于'int&'
int a = 1;
int const const const & const const const const b = a;
此代码也编译好。
答案 0 :(得分:5)
它没有编译罚款。我的Visual C ++说(并且刚刚用/nologo /EHsc
编译,没有额外的警告,没有/permissive-
):
warning C4227: anachronism used: qualifiers on reference are ignored
在您的第二个示例中,也表示:
warning C4114: same type qualifier used more than once
你还想要什么?它显然不是一个错误,因为错误的代码被明确识别。编译器可能接受它以避免遗留代码的问题,但只要产生诊断消息,编译器就会以完全符合标准的方式运行。您可以不忽略警告,如果您愿意,可以将它们视为错误(Visual C ++也有一个编译器标志可以帮助您)。