"使用命名空间std"之间的区别和"命名空间std"?

时间:2014-05-23 11:58:48

标签: c++

这是我的代码:

#ifndef DATE_H_
#define DATE_H_

namespace std {

class Date {
    public:
       Date();
       virtual ~Date();
    };

} /* namespace std */

#endif /* DATE_H_ */

我为我的作业创建了课程日期,并创建了它 namespace std{......}。我不知道它的用途。 为什么不像往常那样写use namespace std; 有什么区别?

2 个答案:

答案 0 :(得分:5)

您的代码在命名空间std中声明您的类Date,即您的类完全限定名称将是std :: Date

声明

using namepace std;

在搜索符号时将包含命名空间std。

一些补充说明:

  1. 标准明确规定,向std命名空间添加内容可能会导致未定义的行为,这使得它不仅是一种不好的做法,而且超出了标准。有关详细讨论,请参阅Adding types to the std namespace
  2. 在* .h(或包含在多个文件中的任何内容)上使用using namespace不是一个好习惯...因为它可能会出现意外的副作用,并且符号被解析为错误命名空间。

答案 1 :(得分:3)

首先:你不应该在std命名空间中放任何东西。

namespace foo
{
  class A {};
}

将类A放入名称空间foo,因此其全名为foo::A

using namespace foo;

表示您可以在不使用限定符foo的情况下访问foo::中的所有内容。
请注意,using namespace通常不受欢迎,可能导致许多意外问题 最重要的是,不要在标题中写下来。

如果你说

using namespace foo;

class A{};

A不在foo内,而是在全局命名空间中。