gpt4 book ai didi

c++ - visual studio 和 gcc 的 const 引用语法区别

转载 作者:行者123 更新时间:2023-11-30 01:44:08 30 4
gpt4 key购买 nike

#include <iostream>

void swap(float& const a, float& const b)
{}

int main()
{
std::cout << "Hello, world!\n";
}

这段简单的代码可以在 Visual Studio (vs2013) 中编译,但不能在 gcc 中编译。我试过 C++ 10 和 C++11。 gcc 报错说

error: 'const' qualifiers cannot be applied to 'float&'

但是如果我把函数定义改成

void swap(float const &a, float const &b)

它在 gcc 和 visual studio 中编译。

我的问题是,这两种语法的意思是一样的吗?另外,为什么它用 visual studio 而不是 gcc 编译

最佳答案

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

C++14 §8.3.2/1:

Cv-qualified references are ill-formed except when the cv-qualifiers are introduced through the use of a typedef-name (7.1.3, 14.1) or decltype-specifier (7.1.6.2), in which case the cv-qualifiers are ignored.

decltype-specifierdecltype 关键字的使用。


Visual C++ 2015 对此发出警告(警告级别 4):

C:\my\forums\so\141> cl foo.cpp /Febfoo.cppfoo.cpp(3): warning C4227: anachronism used: qualifiers on reference are ignoredfoo.cpp(3): warning C4100: 'b': unreferenced formal parameterfoo.cpp(3): warning C4100: 'a': unreferenced formal parameterC:\my\forums\so\141> g++ foo.cpp -Wno-unused-parameterfoo.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> _

关于c++ - visual studio 和 gcc 的 const 引用语法区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36730652/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com