这些中的每一个生成的代码应该完全相同。从一开始就不会有任何膨胀,因为它只是std
在编译时使所有名称都可用于代码 - 未使用的内容不会被采用。std
实际使用的唯一名称是cout
,endl
因此编译代码的最终结果是相同的。
优点和缺点是:
这将在大多数行中包含更简洁的代码。阅读它的人可能不得不更努力地考虑在哪里定义cout
和endl
定义,尽管对于像他们这样知名的东西来说,这并不是一个大问题。编译可能需要更长的时间,因为每个名称的可能含义范围稍大一些,但这可能可以忽略不计,除非程序很大并且您正在编译的机器非常弱。如果范围内的某个其他名称空间定义了 ancout
或 an,endl
那么名称将不明确,您将被迫使用其他名称空间之一。
1号的优点,只带两个名字就减少了缺点。
与第一名相反。编译器和开发人员在查看源代码时都没有歧义,但代价是更加冗长。
std
因此,如果这些是整个文件中的唯一用途,则可能值得采用方法 3 ,如果std
重复使用的东西很多,则使用方法 3,如果您使用cout
很多endl
,则使用方法 2,但std
.
或者您可以一直使用数字 1,除非由于歧义而被迫这样做。
两者并不相互排斥。一个可以做到:
using namespace std;
/*...*/
std::cout << "Hello" << std::endl;
这里当然是多余的,但是如果这些在上下文中是模棱两可的,但其他用途不是,或者如果人们可能不熟悉特定名称,那么冗余代码有助于可读性std::
,我们可能会这样做。std
还有一些以这种方式给出全名的更常见的名称,并且做常见的事情本身就有助于提高可读性。
尽管如此,除非出现歧义(不会编译),否则所有这些都会在编译时产生相同的程序。
编辑:
我在这里假设一个 .cpp 文件,但我同意其他人关于标题的看法。在 .h 文件中,您强制对包含在其中的所有文件做出决定,并且只需要一个模棱两可就可以做出错误的决定。开发人员也不太容易看到它,因为包含的地方并不靠近使用地点。
如果您真的想在 .h 文件中使用 1 或 2 ,则using
通过将其放置在命名空间、类或函数中来确定其范围,这样包含该文件的人就不会有任何意外。