使用 VS2017 的 C++ 函数重载

Function overload with C++ using VS2017

我在 VS2017 中编译这段简单代码时遇到问题,但代码在代码块中运行良好。 在 VS2017 中,我收到此错误消息:

C2382 'abs':redefinition; different exception specifications

下面是代码:

#include <iostream>
using namespace std;

int abs(int i);
float abs(float f);

int main()
{
    cout << abs(-10) << endl;
    cout << abs(-11.0f) << endl;
    return 0;
}
int abs(int i)
{
    cout << "Using integer abs()\n";
    return i<0 ? -i : i;
}
float abs(float f)
{
    cout << "Using float abs()\n";
    return f<0.0f ? -f : f;
}

您收到错误的原因是因为标准库中已经有一组名为 abs 的函数,通常必须使用 std:: 访问这些函数,但是 using namespace std 删除该限定符,在所有函数之间造成名称冲突。因此,您应该将函数名称更改为 myAbs 之类的名称,或者删除 using namespace std。更好的更改是同时删除 using 语句 重命名函数。

您的代码展示了为什么应避免 using namespace std 的一个关键原因,因为它会导致命名空间冲突和不必要的混淆。