"using namespace std"和"namespace std"之间的区别?

use*_*125 -3 c++

这是我的代码:

#ifndef DATE_H_
#define DATE_H_

namespace std {

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

} /* namespace std */

#endif /* DATE_H_ */
Run Code Online (Sandbox Code Playgroud)

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

jsa*_*der 5

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

一份声明

using namepace std;
Run Code Online (Sandbox Code Playgroud)

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

一些额外的说明:

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


mol*_*ilo 5

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

namespace foo
{
  class A {};
}
Run Code Online (Sandbox Code Playgroud)

将类放在A命名空间中foo,因此它的全名是foo::A.

using namespace foo;
Run Code Online (Sandbox Code Playgroud)

foo意味着您无需使用限定符即可访问其中的所有内容foo::
请注意,这using namespace通常是不受欢迎的,并且可能会导致许多意想不到的问题。
最重要的是,不要将其写在标题中。

如果你说

using namespace foo;

class A{};
Run Code Online (Sandbox Code Playgroud)

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