为什么“int&const”与MSVC编译良好?

问题描述 投票:2回答:1

请考虑以下代码:

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;

这段代码编译也很好。

c++ visual-studio language-lawyer
1个回答
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 ++也有一个编译器标志来为你做这件事)。

© www.soinside.com 2019 - 2024. All rights reserved.