const参考语法Visual Studio和gcc之间的区别

时间:2016-04-19 22:31:54

标签: c++ visual-studio gcc

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

1 个答案:

答案 0 :(得分:4)

float& const a无效。引用不能是const。它可以引用const对象,但它本身不能是const(因为它不可重复,所以没有意义。)

C ++14§8.3.2/ 1:
  

除非引入了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> _