C++:名称空间中变量的生命周期
有人能给我解释一下命名空间变量的生命周期吗?假设我有以下文件: 文件.h:C++:名称空间中变量的生命周期,c++,namespaces,C++,Namespaces,有人能给我解释一下命名空间变量的生命周期吗?假设我有以下文件: 文件.h: // ... namespace variables{ int x, y; } file.cpp: #include "file.h" using namespace variables; int main(){ ... } x和y的范围是什么?我问,因为在我读C++ +引物+的一本书中,作者建议使用函数内的命名空间,所以我认为它们是在使用命令的点定义的。但是,当我这样做时: B.h: 然后在mai
// ...
namespace variables{
int x, y;
}
file.cpp:
#include "file.h"
using namespace variables;
int main(){
...
}
x和y的范围是什么?我问,因为在我读C++ +引物+的一本书中,作者建议使用函数内的命名空间,所以我认为它们是在使用命令的点定义的。但是,当我这样做时:
B.h:
然后在main.cpp主程序和B.cpp类实现中,我添加了include B.h行,我得到一个错误,我有多个变量::x和变量::y的定义,即使在任何文件中都没有使用。怎么回事?我是否混淆了两个不同的概念?名称空间对变量的寿命没有影响,因此:
namespace variables{
int x, y;
}
#include "file.h"
using namespace variables;
int main(){
...
}
x和y的范围是什么
这些变量是全局变量,所以它们的生命周期等于整个应用程序的生命周期
请记住,使用名称空间只是在该名称空间中的元素前面编写NamespaceName::的快捷方式。如果您像这样直接在名称空间中声明变量,那么它们将作为全局变量存在 因此,适用于普通全局变量的规则也适用于这些变量:只要程序运行,它们就会存在,您不应该在头文件中定义它们 包括
namespace Variables
{
extern int x;
extern int y;
}
file.cpp
namespace Variables
{
int x;
int y;
}
使用名称空间变量编写只允许您通过名称x和y访问这些变量,而不必在它们前面加上变量::
我添加了include B.h行,得到一个错误,我有多个变量::x和变量::y的定义,即使在任何文件中都没有使用。怎么回事?我是否混淆了两个不同的概念
即使未显式导入命名空间,也会声明变量。关键字使用导入名称空间或当前范围内的特定名称,这样您就不必在X::前面加前缀来访问已定义的元素
变量的生命周期不受名称空间的影响。首先,在头文件中定义变量并不是一个热门主意。这实际上是我的问题。我在问定义发生在哪里。
namespace Variables
{
int x;
int y;
}