Possible Duplicates:
Why is 'using namespace std;' considered a bad practice in C++?
Using std Namespace
我一直在一堆不同的论坛上徘徊,我似乎每次都能看到这个弹出窗口。这是一个非常初级的问题。
我通常用
1 2 3 4
| #include<string>
using namespace std;
string x; |
我看到外面有一堆代码示例,它们将字符串定义为
这样做的目的是什么?这是一个好的实践还是有一些功能?
- 为什么使用"命名空间STD"可能是C++中的一个坏习惯?。另请参见为什么std::由经验丰富的编码人员使用,而不是使用命名空间std;?.
- 我做了一个搜索,但没有找到那些问题。每个人都很开心。
正如前面提到的另一个答案,除非导入整个std命名空间或std::string(见下文),否则使用std::是必要的。
在我看来,使用std::string而不是string更好,因为它明确地表明它是std::string,而不是其他一些字符串实现。
不过,如果您只想写string,我建议您使用using std::string;,而不是using namespace std;,只将实际需要的内容导入全局命名空间。
string的全称是std::string,因为它位于EDCOX1(11)中,所有C++标准库函数、类和对象所在的命名空间。
在代码中,您显式地添加了行using namespace std;,它允许您使用标准名称空间中的任何内容,而不使用std::前缀。因此,由于编译器知道要在namespace std中查找它,所以可以使用缩写string来引用EDOCX1(字符串类型的实名)。
string和std::string之间没有功能差异,因为它们是相同的类型。也就是说,有时你会喜欢std::string而不是string。例如,在头文件中,通常认为将行using namespace std;放在(或使用任何名称空间)不是一个好主意,因为这样会导致包含该头文件的文件中的名称变得不明确。在这个设置中,您只需在头文件中输入#include ,然后使用std::string引用字符串类型。同样,如果std::string和其他string类型之间存在任何歧义,使用std::string的名称可以消除歧义。
不管您是否包括using namespace std;行,这是一个有争议的话题,许多程序员都强烈赞成或强烈反对它。我建议您使用任何您喜欢的,并确保在处理大型项目时采用任何编码约定。
- string的全名是::std::string,但没有人使用。
正如ssteinberg所说的那样。但只在句法上。
根据我的经验,使用全名更有用
无论您在哪里需要它,或添加一个显式
在源文件的开头。
这样做的好处是,源文件的依赖性更加明显。如果添加
这意味着您的代码可能依赖于该命名空间中的任何内容。
如果它们不是usingnamespace std,那么它们必须使用std::string指定属于哪个命名空间字符串。
如果您的代码前面有using namespace std;,那么它是相同的。