首页 文章

为什么std ::由有经验的编码人员使用而不是使用命名空间std;? [重复]

提问于
浏览
9

可能重复:为什么'使用命名空间std;'被认为是C的坏习惯?

有一天,当我问一个问题,有人回答说如果有人问一个问题,告诉他们正确的做法,而不是 using namespace std; ,我认为这有点奇怪,因为 using namespace std; 更容易,但我想我'm failing right now as I am a '初学者'编码你们知道的更好

所以我想我的问题是:为什么 std:: 而不是 using namespace std;

谢谢 .

6 回答

  • 2

    来自C FAQ:

    我应该在我的代码中使用命名空间std吗?可能不是 . 人们不喜欢一遍又一遍地输入std ::并且他们发现使用命名空间std可以让编译器看到任何std名称,即使是不合格的 . 美中不足的是它让编译器看到任何标准名称,甚至是你没想过的名字 . 换句话说,它可以创建名称冲突和歧义 .

    https://isocpp.org/wiki/faq/coding-standards#using-namespace-std

  • 0

    简而言之,您不太可能错误地使用错误的类型或功能,或者命名冲突 . 假设您正在使用自己的数学库和std,并以任意顺序使用它们进行声明 . 现在,他们都定义了功能pow . 你在调用战俘的时候使用哪种战俘?我觉得值得多打字 .

  • 1

    我不知道更有经验的程序员使用显式名称空间的情况,参见例如Do you prefer explicit namespaces or 'using' in C++?

    但是请注意,您永远不应该在头文件中导入名称空间,并且在某些情况下,显式名称空间更清晰,例如使用函数 std::min()std::max()

  • 0

    我认为这是一个偏好的东西 . 有些人喜欢在使用类时看到显式名称空间 . 一个例外是我从不在头文件中使用using namespace std . 因为这可能会意外地改变使用此头文件的类的行为 .

  • 4

    经验丰富的程序员使用任何解决问题的方法,避免出现任何问题 .

    因此,出于显而易见的原因,它们避免使用头文件级使用指令 .

    他们试图避免在源文件中对名称进行完全限定 . 不足之处在于,如果没有充分理由,在代码较少的情况下编写更多代码并不优雅 . 重点是关闭ADL .

    这些好理由是什么?有时您明确要关闭ADL . 有时你想消除歧义 .

    以下是可以接受的:1)函数级使用指令和函数实现中的使用声明; 2)源文件中的源文件级使用声明; 3)(有时)源文件级使用指令 .

  • 21

    命名空间是我们变量的附加限定符 . 假设我们在 std 中定义了'string',现在如果我们在 mynamespace 中也定义'string' .

    现在,如果我在文件的顶部写 using namespace std; ,那么从那里开始,字符串对于编译器来说变得模糊不清 .

    然而,人们可以采取中间方法,严格地不在 Headers (.h)文件中使用 using namespace std; ,因为其他人可能想要使用您的类并且可能会发生冲突 . 对于实现(.cxx)文件,如果您确定不会发生任何冲突,则可以小心使用它 .

相关问题