我不确定 C/C++ 三元运算符的执行保证。
例如,如果给我一个地址和一个布尔值,告诉我该地址是否适合读取,我可以使用 if/else 轻松避免错误读取:
int foo(const bool addressGood, const int* ptr) {
if (addressGood) { return ptr[0]; }
else { return 0; }
}
但是,三元运算符 ( ?:
) 能否保证除非为真,ptr
否则不会被访问?或者优化编译器是否可以生成在任何情况下都可以访问的代码(可能会使程序崩溃),将值存储在中间寄存器中并使用条件赋值来实现三元运算符?addressGood
ptr
int foo(const bool addressGood, const int* ptr) {
// Not sure about ptr access conditions here.
return (addressGood) ? ptr[0] : 0;
}
谢谢。