可能重复:
How are static variables with the same name in different functions identified by the System?
编译器如何区分具有相同名称但在两个不同(静态)成员函数中定义的两个本地静态变量?
class Type
{
public:
static void fun()
{
static bool sameName = false;
// work with sameName
}
static void moreFun()
{
static bool sameName = false;
// work with sameName
}
};
答案 0 :(得分:4)
它与范围有关。
sameName存在于两个不同的范围中/在这种情况下是两个函数范围
所以内部变量可能用名称fun.sameName和moreFun.sameName引用(名称只是由我发明的arbtitrary,但显示原理)。
答案 1 :(得分:2)
在C ++ SPEC(例如:N3337)中说:
3关键字static可用于声明具有静态存储duraion的局部变量。
(第62页;第3.7.1节静态存储持续时间)
在您的情况下,变量static bool sameName
属于函数fun
的范围。另一个变量static bool sameName
属于函数moreFun
的范围。这两个静态变量属于不同的范围。 static
关键字效果仅限于持续时间,而不是效果范围。