Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++:名称空间中变量的生命周期_C++_Namespaces - Fatal编程技术网

C++:名称空间中变量的生命周期

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

有人能给我解释一下命名空间变量的生命周期吗?假设我有以下文件:

文件.h:

// ...
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;
}