使用
的原因很明显using namespace std;
被认为是不好的做法。因为我对C ++很新(大概8个月了),我想知道当我使用
时它仍然被认为是不好的做法using std::cout;
using std::cin;
using std::endl;
等等只包括我需要的内容而不是包含整个命名空间。我的老教师总是告诉我们不要使用它,但我的新老师告诉我们,使用using
- 声明与包含整个命名空间相比,这很好。
你使用了什么,你认为这是一种不好的做法吗?
我希望这个问题不是重复,但我没有找到这样的问题,只是关于 为什么 的问题被认为是使用 using namespace std;
的不良做法,但如上所述,我已经知道了。
答案 0 :(得分:1)
我不喜欢我原来的答案,太罗嗦了,所以这里有一个更好的重写。
Here's a good answer on why using namespace is bad.
考虑到这个答案,如果库 Foo
具有函数 kept
并且 Bar
具有函数 lept
。使用 2 个 using 指令,您可以在没有作用域的情况下使用 kept
和 lept
。如果 Foo
决定更新并添加函数 lept
,那么您选择的编译器要么会出错,要么会出现未定义的行为*。如果您使用 using Foo::kept
和 using Bar::lept
,那么在 Foo
上添加 lept
的更新不会导致任何错误,您可以使用 Foo::lept
调用该新功能。它也被认为是使用指令的正确形式,而不是在全局范围内使用它们。 Rather, for each function that you want to use a using-directive, redefine it。使用 using std::cout
等是不错的做法,并且在某些情况下,允许快速更改库。例如,我正在使用 JSON 解析库。为了测试它们,我在程序的开头添加了 using json = LIBRARY::json
行,如果我不喜欢我拥有的库,我可以快速更换它们。
*例如,如果 Bar
将 lept
定义为 double lept(double, double)
,但 Foo
将 lept
定义为 int lept(int, int)
,则调用to lept
与 2 int 输入将调用 Foo::lept
或在编译时给出错误。这意味着在您测试之前,您不会知道您的程序中存在大量错误。