iva*_*ult 3 c++ visual-studio language-lawyer
请考虑以下代码:
int a = 1;
/* Note that const is on the right here */
int & const b = a;
Run Code Online (Sandbox Code Playgroud)
当然,它没有任何意义(因为引用就像非空常量指针),但是这个代码在MSVC 2015和MSVC 2017中编译得很好.GCC和Clang无法按预期编译它:
错误:'const'限定符不能应用于'int&'
这是有意的吗?这是一个错误吗?
int a = 1;
int const const const & const const const const b = a;
Run Code Online (Sandbox Code Playgroud)
这段代码编译也很好.
它不会编译罚款.我的Visual C++说(而且只是编译/nologo /EHsc,没有额外的警告,没有/permissive-):
warning C4227: anachronism used: qualifiers on reference are ignored
Run Code Online (Sandbox Code Playgroud)
在第二个例子中,它也说:
warning C4114: same type qualifier used more than once
Run Code Online (Sandbox Code Playgroud)
你还想要什么?这显然不是一个错误,因为错误的代码被明确识别.编译器可能接受它以避免遗留代码的问题,但只要产生诊断消息,编译器就会以完全符合标准的方式运行.你不要忽视警告,如果你愿意,你可以将它们视为错误(Visual C++也有一个编译器标志来为你做这件事).
| 归档时间: |
|
| 查看次数: |
188 次 |
| 最近记录: |