为什么在C+中使用指令+;不鼓励吗? 我读到,在C++中不鼓励使用指令,也就是说不要在头文件中使用指令。为什么会这样?有什么提示吗

为什么在C+中使用指令+;不鼓励吗? 我读到,在C++中不鼓励使用指令,也就是说不要在头文件中使用指令。为什么会这样?有什么提示吗,c++,C++,谢谢 因为它可能会破坏工作代码,当尝试添加标头时,如果标头命名空间践踏了过去工作代码中定义的其他命名空间。如果您谈论的是“using”指令,则不使用它的原因是 使用名称空间std 在头文件中,包含该头文件的所有文件都将被迫使用该名称空间,这可能会导致问题 使用名称空间x是一个非常糟糕的主意,因为即使使用标准库,您也不知道要导入什么名称 然而:使用std::cout和类似的语句是一个非常好的主意,因为它们显式地导入符号,并使代码更具可读性(尽管将它们放在头文件的全局范围内可能仍然不是一个好主意)。

谢谢

因为它可能会破坏工作代码,当尝试添加标头时,如果标头命名空间践踏了过去工作代码中定义的其他命名空间。

如果您谈论的是“using”指令,则不使用它的原因是

使用名称空间std


在头文件中,包含该头文件的所有文件都将被迫使用该名称空间,这可能会导致问题

使用名称空间x
是一个非常糟糕的主意,因为即使使用标准库,您也不知道要导入什么名称


然而:
使用std::cout
和类似的语句是一个非常好的主意,因为它们显式地导入符号,并使代码更具可读性(尽管将它们放在头文件的全局范围内可能仍然不是一个好主意)。

在头文件中声明静态变量类似于否。在头文件中添加using语句将把名称空间带到包含头文件的.cpp文件中。这是没有必要的。在更糟糕的情况下,您可能必须更改.cpp中的某些变量或函数名称以避免命名冲突。

不,它们不会被迫使用该名称空间。“这不是参数,只是矛盾!”@struppi mynamespace::foo=1@Neil:对不起,我不明白。将“using namespace baz”放在一个头中会将baz的所有符号导入到包含该头的所有作用域中。从某种意义上说,这可能意味着“被迫使用该名称空间”,你不这样认为吗?不,因为根据我之前的评论,我可以选择使用其他名称空间。@相反,不仅可以使名称可见,而且名称作为更大范围的一部分可见,包括using指令和它指定的名称空间。这些名称不会显式导入到指令出现的范围中。因此,可能会出现名称更多的歧义。