。cpp文件中有一个看起来像这样的函数:
void function() {
//...
if (left != right)
do_something();
}
在该.cpp文件中最终包含的不相关的头文件中,有以下行:
using namespace std;
我正在做一些清理工作,并在所有地方都删除了此using namespace std
,并添加了缺少的std::
资格。但是if (left != right)
行不再编译了……产生了什么?
嗯:如果他们告诉您using namespace std
不好,那是真的!
事实证明,left != right
是旧版本代码留下的比较结果,该版本显示为
void function() {
int left, right;
//...
if (left != right)
do_something();
}
稍后,代码被重构,并且left
和right
本地语言被删除。
使用using namespace std
,比较被解释为if (std::left != std::right)
,并且始终为真!因为std::left
和std::right
是两个函数,所以它们总是比较不同,并且可以比较,因为C ++继承C的特性,并在必要时将函数视为函数指针。
是的,如果您是using namespace std
,则应停止。马上。它将很高兴地使无意义的代码编译,而您甚至不知道...
Pinging PVS-Studio和cppcheck开发人员:您可能希望标记此项目。这太笨拙了。