我有一个C ++项目(VC ++ 2008),它只在许多源文件中使用std命名空间,但我找不到放置“using namespace std;”的“正确”位置。
如果我把它放在main.cpp中,它似乎没有传播到我的其他源文件。当我把它放在一个头文件中时,我有它的工作,但我被告知这很糟糕。如果我将它放在我的所有.cpp文件中,编译器就无法识别std命名空间。
应该怎么做?
答案 0 :(得分:2)
在你的标题中,我认为最好的办法就是完全限定名称空间,例如成员
#include <list>
class CYourClass
{
std::list<int> myListOfInts;
...
};
您可以继续完全符合cpp
中的任何功能int CYourClass::foo()
{
std::list<int>::iterator iter = myListOfInts.begin();
...
}
你真的不需要在任何地方“使用命名空间std”。只有当你发现你输入的std ::太多时,才会抛出“使用命名空间std”以保存自己的击键并提高代码的可读性。这将仅限于声明的范围。
int CYourClass::foo()
{
using namespace std;
list<int>::iterator iter = myListOfInts.begin();
...
}
答案 1 :(得分:2)
您通常有三个可接受的选项:
我认为最常被接受的最佳做法是使用#1 - 准确显示方法的来源。
在某些情况下,文件完全依赖于从命名空间中提取内容,以便将使用命名空间放在源文件的顶部更具可读性。虽然由于懒惰很容易做到这一点,但尽量不要屈服于这种诱惑。至少通过将其放在特定的源文件中,维护代码的人可以看到它。
第三种情况通常是不良做法。如果您依赖于多个可能定义相同方法的外部源文件,则可能会导致问题。此外,对于维护代码的人来说,它会混淆某些声明的来源。这应该避免。
<强>要点:强> 更喜欢使用作用域实例(std :: Something),除非过度使用这些实例会降低代码的易读性和可维护性。
答案 2 :(得分:0)
您可以将它放在多个位置 - 每个.cpp文件中。
答案 3 :(得分:0)
基本上,您需要做出选择:
1)通过在所有cpp文件中加入using namespace std
来“做正确的事”,或者
2)在一些常见的头文件中添加using namespace std
。
不同的人会有不同的意见,但如果你问我,我会选择将using namespace std
放在一个共同的标题中。在我看来, std 命名空间只是 - “标准”,任何名称冲突都需要在代码级别解决,而不是依赖于命名空间。
答案 4 :(得分:0)
命名空间不会“传播”到其他文件。 你必须将它放在每个文件中,或者只是明确地调出你的类。
或者:
使用命名空间std; blah&lt;&lt; X;
或:
std :: blah&lt;&lt; X;
选择是一种风格选择,或者在实践中起作用。
如果编译器没有“识别”命名空间,那是因为你没有包含声明它的定义文件(即包括)
答案 5 :(得分:0)
传播代码using namespace std;
并不是一个好主意,因为这样做似乎很方便。但是如果你坚持它,你可以将自己的代码包装到该名称空间中。只有在您实际上将在主文件中使用您的函数/类时,您才会定义using namespace std;
。只是为了强调我说的,这里的例子是:
namespace std
{
class MyNewClass
{
public:
MyNewClass( ) { out << "Hello there" << endl;};
};
};
int main( )
{
std::MyNewClass tmp;
};