void swap(float const &a, float const &b)
这个简单的代码在Visual Studio(vs2013)中编译,但不在gcc中编译。我试过c ++ 10和c ++ 11。 gcc说错误
错误:'const'限定符不能应用于'float&'
但如果我将功能定义更改为
printf()
它在gcc和visual studio中编译。
我的问题是,这两种语法是否意味着相同的东西?另外,为什么它与visual studio编译而不是gcc
答案 0 :(得分:4)
float& const a
无效。引用不能是const
。它可以引用const
对象,但它本身不能是const
(因为它不可重复,所以没有意义。)
“除非引入了cv限定符,否则Cv限定的引用格式不正确 通过使用 typedef-name (7.1.3,14.1)或 decltype-specifier (7.1.6.2),在这种情况下,将忽略cv限定符。< / p>
decltype-specifier 是decltype
关键字的使用。
Visual C ++ 2015会对此发出警告(警告级别为4):
C:\my\forums\so\141> cl foo.cpp /Feb foo.cpp foo.cpp(3): warning C4227: anachronism used: qualifiers on reference are ignored foo.cpp(3): warning C4100: 'b': unreferenced formal parameter foo.cpp(3): warning C4100: 'a': unreferenced formal parameter C:\my\forums\so\141> g++ foo.cpp -Wno-unused-parameter foo.cpp:3:24: error: 'const' qualifiers cannot be applied to 'float&' void swap(float& const a, float& const b) ^ foo.cpp:3:40: error: 'const' qualifiers cannot be applied to 'float&' void swap(float& const a, float& const b) ^ C:\my\forums\so\141> _