【发布时间】:2016-04-19 22:31:54
【问题描述】:
#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 给出一个错误提示
错误:“const”限定符不能应用于“float&”
但是如果我把函数定义改成
void swap(float const &a, float const &b)
它在 gcc 和 Visual Studio 中编译。
我的问题是,这两种语法的意思是一样的吗?另外,为什么它用visual studio而不是gcc编译
【问题讨论】:
-
直觉上签名应该是
void swap(const float& a, const float& b)。 -
没有 C++10。您的意思可能是 98 或 03。
-
Visual Studio 错了(又一次)。
-
不知道第一个语法是否合法,但它应该没有任何效果,因为无论如何您都无法更改引用的目标。第二种语法和@πάνταῥεῖ 提出的语法有不同的含义。
-
@πάνταῥεῖ:直觉上应该是
void swap( ref<const float> a, ref<const float> b ),并且可以定义一个模板ref用于此用途。这适用于模板重载解析的简单类型推导。但是auto的类型推导有点问题,规则不一样。
标签: c++ visual-studio gcc