不使用左右两个简单的比较停止工作命名空间std [重复]

问题描述 投票:3回答:1

。cpp文件中有一个看起来像这样的函数:

void function() {
  //...
  if (left != right)
    do_something();
}

在该.cpp文件中最终包含的不相关的头文件中,有以下行:

using namespace std;

我正在做一些清理工作,并在所有地方都删除了此using namespace std,并添加了缺少的std::资格。但是if (left != right)行不再编译了……产生了什么?

c++
1个回答
6
投票

嗯:如果他们告诉您using namespace std不好,那是真的!

事实证明,left != right是旧版本代码留下的比较结果,该版本显示为

void function() {
  int left, right;
  //...
  if (left != right)
    do_something();
}

稍后,代码被重构,并且leftright本地语言被删除。

使用using namespace std,比较被解释为if (std::left != std::right),并且始终为真!因为std::leftstd::right是两个函数,所以它们总是比较不同,并且可以比较,因为C ++继承C的特性,并在必要时将函数视为函数指针。

是的,如果您是using namespace std,则应停止。马上。它将很高兴地使无意义的代码编译,而您甚至不知道...

Pinging PVS-Studio和cppcheck开发人员:您可能希望标记此项目。这太笨拙了。

© www.soinside.com 2019 - 2024. All rights reserved.