C ++三元运算符执行条件

rsp1984

我不确定C / C ++三元运算符的执行保证。
例如,如果给我一个地址和一个布尔值,指示该地址是否适合读取,则可以使用if / else轻松避免读取错误:

int foo(const bool addressGood, const int* ptr) {
    if (addressGood) { return ptr[0]; }
    else { return 0; }
}

但是,三元运算符(?:)是否可以保证ptr除非addressGood为true,否则不会被访问
还是优化的编译器可以生成ptr在任何情况下都可以访问(可能会使程序崩溃)的代码,将值存储在中间寄存器中,并使用条件赋值来实现三元运算符?

int foo(const bool addressGood, const int* ptr) {
    // Not sure about ptr access conditions here.
    return (addressGood) ? ptr[0] : 0;
}

谢谢。

用户名

是的,该标准保证ptr只有在addressGood为true时才可以访问请参阅有关该主题的标准答案

条件表达式从右到左分组。第一个表达式在上下文中转换为bool(第4条)。将对其求值,如果为true,则条件表达式的结果为第二个表达式的值,否则为第三个表达式的值。仅计算第二和第三表达式之一。与第一个表达式关联的每个值计算和副作用在与第二个或第三个表达式关联的每个值计算和副作用之前进行排序。

(C ++ 11标准,第5.16 / 1段)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

条件/三元运算符如何工作?C ++

来自分类Dev

C#与C ++三元运算符

来自分类Dev

C vs C ++中的三元运算符

来自分类Dev

C的三元条件运算符是否创建新作用域?

来自分类Dev

以下c#代码的含义是什么(束缚条件三元运算符)

来自分类Dev

使用C#三元条件运算符进行强制转换

来自分类Dev

在 C++ 中使用三元运算符总是返回错误条件

来自分类Dev

C中的三元运算符

来自分类Dev

C ++三元运算符混乱

来自分类Dev

C ++三元运算符使用

来自分类Dev

Java vs C中的三元运算符

来自分类Dev

C ++中三元运算符的异常行为

来自分类Dev

C中的三元运算符

来自分类Dev

Java vs C中的三元运算符

来自分类Dev

C#三元运算符?:效率

来自分类Dev

具有三元条件运算符(?:)的C ++ 11 constexpr函数编译器错误

来自分类Dev

使用三元运算符的C函数调用选择

来自分类Dev

C ++三元运算符字符串连接

来自分类Dev

C中三元运算符采用不同操作数类型的原理

来自分类Dev

C#三元运算符中的调用函数

来自分类Dev

C ++中的临时,引用和三元运算符

来自分类Dev

C中的三元运算符和左值

来自分类Dev

是否可以在目标C的getter的延迟实例化中使用三元运算符?

来自分类Dev

C ++ Boost Tribool三元运算符错误值

来自分类Dev

C#子表达式中的OR使用三元运算符

来自分类Dev

在Objective-C中使用带有三元运算符的块

来自分类Dev

C#中三元运算符的异常行为

来自分类Dev

在C ++流中使用三元运算符可以吗?

来自分类Dev

Lambda表达式C#中的三元运算符