C++中的命名空间成员(使用与不使用)

Namespace Members in C++ (using vs not using)

本文关键字:命名空间 成员 C++      更新时间:2023-10-16

所以这只是一个奇怪的想法。我暂时拥有以下.h和.cpp文件:

.h:

#ifndef A_H_
#define A_H_
namespace A {
    void FunctionOne();
}
using namespace A;
void FunctionTwo();
#endif

.cpp:

#include <iostream>
#include "A.h"
using namespace std;
void A::FunctionOne() {
    cout << "Function one!";
}
void A::FunctionTwo() {
    cout << "Function two!";
}

现在,这不起作用。我得到一个编译时错误,因为"FunctionTwo"不是"a"的成员。但这让我有点困惑。我本以为这只是语法问题。

如果以这种方式声明时FunctionTwo不是a的成员,那么它是什么?

using namespace A;namespace A { ... }的含义不同。

它允许从命名空间A中自动查找符号,但这并不意味着它后面的每个声明都会自动声明到该命名空间中。事实上,它对声明几乎没有任何作用。

因此,您的FunctionTwo仍在全局命名空间中,而不是A命名空间的一部分。

它将是全局命名空间的成员,即::引用的命名空间,在本例中为:::FunctionTwo()