静态成员函数中静态变量的名称相同

Same name for a static variable within a static member function

本文关键字:变量 函数 静态 静态成员      更新时间:2023-10-16

可能的重复项:
系统如何识别不同函数中同名的静态变量?

编译器如何在两个具有相同名称但在两个不同(静态)成员函数中定义的局部静态变量之间区分?

class Type
{
    public:
        static void fun()
        {
            static bool sameName = false;
            // work with sameName
        }
        static void moreFun()
        {
            static bool sameName = false;
            // work with sameName
        }
};

它与作用域有关。

相同名称存在于两个不同的作用域中/在本例中为两个函数作用域

所以在内部,变量可能用名称fun.sameName和moreFun.sameName来引用(名称只是我发明的arbtitrary,但显示了原理)。

在C++ SPEC(例如:N3337)中说:

3 关键字 static 可用于声明具有静态存储 duraion 的局部变量。

(第62页;第3.7.1节静态存储持续时间)

在您的情况下,变量static bool sameName属于函数的作用域 fun 。而另一个变量static bool sameName属于函数的作用域moreFun。这两个静态变量属于不同的范围。static关键字仅影响持续时间,它不是效果范围。