c++ - 我应该使用 volatile c++ 吗?

标签 c++ volatile

请看下面的示例代码。由于 while(1),FuncA 在对象生命周期内永远运行。假设代码在相当长的时间内(24 小时)或更长时间命中“CondB”。这意味着 funcB 中的“curr_status”在此期间不会改变。优化是否有可能开始并且从不检查“curr_status”之后的更新值?我应该在这里使用 volatile 吗?

void funcB(string curr_status){
    static string prev_status = "123";
    if(prev_status != curr_status){
        //do sometthing
        prev_status = curr_status;
    }
}

void funcA(){
    while(1){
        if(condA)
            funcB("123");
        if(condB)
            funcB("xyz");
    }
}

最佳答案

Is it possible that optimization can kick in and never checks for updated value of "curr_status" after that?

没有。优化可能不会改变程序的可观察行为(RVO 和对可能被覆盖的 operator new 的调用放在一边)。这里不需要 volatile

这被称为 as-if rule .

关于c++ - 我应该使用 volatile c++ 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41992165/

相关文章:

c++ - 数组衰减到指针和重载解析

c++ - 再次不稳定 : necessary to prevent optimization?

java - 什么时候使用 Volatile 修饰符?

java - 代码的 “side-effects”到底是什么意思?

c - 什么时候需要 volatile 指针?

c++ - 在 C++ 中,通过引用扩展作用域安全吗?

c++ - 关于内存管理、栈、堆的问题

c++ - 在非 ONPaint 的 MFC 方法中显示图像

c++ - 未指定的指针转换在 C++14 中的行为如何?

c# - volatile 关键字的使用