gpt4 book ai didi

c++ - C 和 C++ 中关键字 static 的含义有何不同?

转载 作者:行者123 更新时间:2023-11-30 18:20:31 25 4
gpt4 key购买 nike

我知道c中的关键字有两种用法:

  • 修改变量

    • 修改全局变量

      这种用法限制了全局变量范围从定义点到文件末尾的范围。

    • 修改局部变量

      这种用法限制了定义的函数中局部变量的范围,但也保留在内存的静态区域

  • 修改函数

    这意味着只能调用它定义的文件中的函数。

在 c++ 中,除了 c 中的用法之外,static也用于修改类的数据成员和函数成员。这种用法限制了属于该类的成员,而不是该类的对象。

我想知道static还有其他用法吗在 C/C++ 中?

最佳答案

static可能是 C 和 C++ 中最容易混淆的重载关键字。在不同的地方有不同的含义。

  • 在函数内,static是一个存储类,表示在程序的生命周期中存在的变量。这么说

    void f() {
    static int i = 0;
    }

    表示 i 的值将在调用 f() 之间保留。其他存储类别默认auto (但要注意 C++11 中含义的变化),extern ,和register ,加上thread_local在 C11/C++11 中。

  • 在文件范围(或 C++ 中的命名空间范围),static是一个链接说明符。函数和变量标记为 static这样就有内部链接,因此对于当前翻译单元来说是本地的。这意味着像这样的函数

     static int f() {
    return 3;
    }

    只能被同一个.c内的其他函数引用文件。 static的这种用法在 C++03 中已被弃用,取而代之的是未命名的命名空间。我在某处读到它在 C++11 中再次被弃用。

  • 在 C++ 中,当应用于类的成员函数或成员变量时,意味着该函数或变量不需要类实例即可访问。 “类静态”成员函数/变量和全局函数/变量在实现方面几乎没有什么区别,只是 C++ 类访问说明符适用于成员。

  • 最后一个:在 C99(但不是 C++)中,static可以在数组函数参数中使用,如下所示:

    void f(int a[static 4]) {
    }

    这指定参数 a必须是大小至少为 4 的整数数组。

我想这就是全部,但如果有我忘记的,请在评论中告诉我!

关于c++ - C 和 C++ 中关键字 static 的含义有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20698290/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com