相关疑难解决方法(0)

static关键字及其在C++中的各种用途

关键字static是一个在C++中具有多种含义的关键字,我发现它非常令人困惑,我永远无法理解它实际上应该如何工作.

根据我的理解,static存储持续时间,这意味着它在全局的情况下持续程序的生命周期,但是当你谈论本地时,它意味着它默认为零初始化.

C++标准对具有关键字的类数据成员说明了这一点static:

3.7.1静态存储持续时间[basic.stc.static]

3关键字static可用于声明具有静态存储持续时间的局部变量.

4应用于类定义中的类数据成员的关键字static为数据成员提供静态存储持续时间.

局部变量是什么意思?这是一个函数局部变量吗?因为还有一个当你声明一个本地函数时static,它只被初始化一次,它第一次进入这个函数.

它也只谈到关于类成员的存储持续时间,它是非实例特定的,那也是staticno 的属性?或者是存储持续时间?

那么static和文件范围的情况如何呢?是否所有全局变量都被视为默认具有静态存储持续时间?以下(来自第3.7.1节)似乎表明:

1所有没有动态存储持续时间,没有线程存储持续时间且不是本地的变量都具有静态存储持续时间.这些实体的存储应持续该计划的持续时间(3.6.2,3.6.3)

如何static与变量的链接相关?

整个static关键字是彻头彻尾的混乱,有人可以澄清英语的不同用途,并告诉我何时初始化一个static类成员?

c++ static

186
推荐指数
6
解决办法
16万
查看次数

内联变量如何工作?

在2016年奥卢ISO C++标准会议上,一项名为Inline Variables的提案被标准委员会投票选为C++ 17.

通俗地说,什么是内联变量,它们如何工作以及它们对什么有用?如何声明,定义和使用内联变量?

c++ c++17

106
推荐指数
3
解决办法
3万
查看次数

内联函数中的静态变量

我有一个在头文件中声明和定义的函数.这本身就是一个问题.如果未内联该函数,则使用该标头的每个翻译单元都会获得该函数的副本,并且当它们链接在一起时会重复.我通过使函数内联来"修复",但我担心这是一个脆弱的解决方案,因为据我所知,即使指定了"inline"关键字,编译器也不保证内联.如果不是这样,请纠正我.

无论如何,真正的问题是,这个函数里面的静态变量会发生什么?我最终会收到多少份?

c++ linker header inline-functions

74
推荐指数
4
解决办法
3万
查看次数

将静态全局变量声明为内联有任何意义吗?

考虑一下,在头文件中声明了全局变量(不是静态类成员!):

inline static int i{};
Run Code Online (Sandbox Code Playgroud)

对于我测试过的几个编译器来说,它是有效的构造,并且实验证明,尽管也将其声明为内联的,但它们将在不同的转换单元中创建多个不同的对象(这意味着该变量中仅一个实例必须存在于程序中)。那么,static关键字比inline在这种情况下具有更高的优先级吗?

c++ static global inline c++17

8
推荐指数
1
解决办法
98
查看次数

标签 统计

c++ ×4

c++17 ×2

static ×2

global ×1

header ×1

inline ×1

inline-functions ×1

linker ×1