gpt4 book ai didi

c++ - 函数局部静态变量是否会自动产生分支?

转载 作者:IT老高 更新时间:2023-10-28 22:01:36 25 4
gpt4 key购买 nike

例如:

int foo()
{
static int i = 0;
return i++;
}

变量 i 只会在第一次调用 foo 时被初始化为 0。这是否自动意味着那里有一个隐藏的分支来防止初始化多次发生?还是有更巧妙的技巧来避免这种情况?

最佳答案

是的,它必须产生一个分支,并且它还必须至少产生一个原子操作以进行安全的并发初始化。该标准要求它们在函数入口时以并发安全的方式进行初始化。

只有当它能够证明惰性初始化和一些早期初始化(例如在输入 main() 之前)之间的区别是等价的时,该实现才能避开这个要求。例如,从常量初始化的简单 POD,编译器可能会选择像文件范围全局一样更早地初始化它,因为它是不可观察的并保存惰性初始化代码,但这是不可观察的优化。

关于c++ - 函数局部静态变量是否会自动产生分支?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23829389/

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