当前位置: 首页 > 知识库问答 >
问题:

关于阅读有效C++第4项(将非局部静态变量替换为局部静态变量)的问题[副本]

商瀚
2023-03-14
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这应该不好吧?

共有1个答案

东郭弘
2023-03-14

根据@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;
}
 类似资料:
  • 问题内容: 是否可以在Go中定义一个局部变量,该局部变量可以从一个函数调用到另一个函数保持其值?在C语言中,我们可以使用保留字。 在C中的示例: 问题答案: 使用闭包: 函数文字是闭包:它们可以引用周围函数中定义的变量。然后,这些变量在周围的函数和函数文字之间共享,并且只要可以访问它们就可以保留。 它不必在全局范围内,只需在函数定义之外即可。 (去操场上的样本)

  • 问题内容: 在C / C ++中,我们使用静态局部变量来维护方法的状态。但是,为什么Java不支持它呢? 是的,我可以为此使用一个静态字段。但是创建一个仅维护一个方法状态的字段有点奇怪吗? 问题答案: 您已经找到了唯一的解决方案。 Java放弃了C ++的许多复杂性,这就是其中之一。 作用于函数的静态变量并发地对您造成麻烦(例如,正是由于这个原因,strtok是与pthread一起使用的著名的讨厌

  • 问题内容: 我已经定义了一个对象并声明了一个静态变量。在该方法中,当我尝试打印实例和类变量时,两者都打印相同的值。 不是实例变量吗?它应该打印0而不是50吗? 问题答案: 不,只有一个变量-您尚未声明任何实例变量。 不幸的是,Java允许您访问静态成员,就像通过相关类型的引用访问静态成员一样。这是IMO的设计缺陷,某些IDE(例如Eclipse)允许您将其标记为警告或错误- 但这是语言的一部分。您

  • 本文向大家介绍浅谈静态变量、成员变量、局部变量三者的区别,包括了浅谈静态变量、成员变量、局部变量三者的区别的使用技巧和注意事项,需要的朋友参考一下 静态变量和成员变量的区别: A:所属不同  静态变量:属于类,类变量    成员变量:属于对象,对象变量,实例变量 B:内存位置不同  静态变量:方法区的静态区    成员变量:堆内存 C:生命周期不同  静态变量:静态变量是随着类的加载而加载,随着类

  • 问题内容: 我已经在Google上进行了广泛的搜索,但均无济于事。我似乎无法将这个概念笼罩在脑海中。为什么本地班级会接受静态最终字段?如下面的以下示例: 在EnglishGoodbye课堂上,允许告别可变吗?为什么?我很困惑。为什么允许但没有静态变量?我知道为什么它不能访问封闭范围的成员,除非它们是一个编译器时间常数,因为当函数结束时这些变量不再存在,但类可能不存在。对?我只是对此感到困惑。 谢谢