【发布时间】:2017-12-27 09:03:04
【问题描述】:
我在.h 文件中有以下类定义:
namespace N {
struct S {
S(); // no definition for member here
};
}
我想在.cpp 文件中编写类构造函数(一般成员)的定义。我考虑以下两种情况:
namespace N { S::S() { /* definition */ } }using namespace N; S::S() { /* definition */ }
我有点困惑为什么第二个工作,因为直到今天才看到这种方式定义。为什么第二个有效?引用标准中的一些内容将不胜感激。
使用一种方法而不是另一种方法有哪些细微差别?我应该更喜欢第一种形式还是第二种形式?
【问题讨论】:
-
如果(2)不起作用,我会感到非常惊讶。显然 (1) 和一般的范围界定是首选。
-
@HenriMenke 在我看来
using namespace实际上是用于“使用”,即调用函数、使用变量等,但不是用于定义。例如。你不能以同样的方式定义一个类。 -
可以,但没有限制。 “使用指令指定的命名空间中的声明在包含使用指令的命名空间中变得可见;”命名空间也可以是翻译单元的全局命名空间。
-
我认为您必须将第二个版本用于未命名的命名空间。
标签: c++ namespaces language-lawyer