关于读取有效 c++ 第 4 项(将非局部静态变量替换为局部静态变量)的问题

Question about reading effective c++ item 4(replace non-local static variable with local static variable)

本文关键字:静态 变量 问题 替换 局部 非局 读取 于读取 有效 c++      更新时间:2023-10-16
class FileSystem {
...
int numDisks();
...
};
FileSystem& theFileSystem() // this replaces the theFileSystem object
{
static FileSystem fileSystem; // define and initialize a local static object
return fileSystem;
}
class Directory {...};
Directory::Directory()
{
...
std::size_t disks = FileSystem::theFileSystem().numDisks();
...
}

书中要求我们用局部静态变量替换非局部静态变量,但是当我们多次调用FileSystem::theFileSystem().numDisks()时,它会多次声明static FileSystem fileSystem,这应该不好吧?

根据@jkb和@Scheff,局部静态变量只存在一次,不能两次声明非局部静态变量。

void test(){
static int i = 0;
i++;
cout<<i<<endl;
}
int main()
{
test(); // 1
test(); // 2
test(); // 3
static int j;
static int j; // error
return 0;
}