首页 > 解决方案 > 关于阅读有效c++项目4的问题(用局部静态变量替换非局部静态变量)

问题描述

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多次,这应该不好,对吧?

标签: c++

解决方案


根据@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;
}

推荐阅读