请考虑以下代码:
int a = 1;
/* Note that const is on the right here */
int & const b = a;
当然,它没有任何意义(因为引用就像非空常量指针),但是这个代码在MSVC 2015和MSVC 2017中编译得很好.GCC和Clang无法按预期编译它:
错误:'const'限定符不能应用于'int&'
这是有意的吗?这是一个错误吗?
int a = 1;
int const const const & const const const const b = a;
这段代码编译也很好。
它编译得不好。我的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 ++也有一个编译器标志来为你做这件事)。