请看下面的示例代码。由于 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/