6.5.15 条件操作符

语法

1、conditional-expression:

logical-OR-expression

logical-OR-expression    ?    expression    :    conditional-expression

约束

2、第一个操作符应该具有标量类型。

3、对于第二和第三个操作数应该遵守下列规则之一:

——两个操作数都应该具有算术类型;

——两个操作数都具有相同的结构体和联合体类型

——两个操作数都具有void类型;

——两个操作数都是兼容类型的指向限定的与非限定版本的指针;

——其中一个操作数是一个指针,而另一个是一个空指针常量;或者

——一个操作数是一个指向对象类型的指针,而另一个是一个指向一个限定或非限定版本的void的指针。

语义

4、第一个操作数被计算;在其计算与第二个或第三个操作数之间有一个顺序点。只有当第一个比较结果不为0时,才计算第二个操作数;只有当第一个操作数比较等于0时,才计算第三个操作数;结果为第二或第三个操作数的值,被转换为下述描述的类型。[注:一个条件表达式不产生一个左值。]

5、如果第二和第三个操作数都具有算术类型,那么结果类型将由通常的算术转换确定,它们被应用到这两个操作数上,作为其结果类型。如果两个操作数都具有结构体与联合体类型,那么结果就具有该类型。如果两个操作数都具有void类型,那么结果具有void类型。

6、如果第二个和第三个操作数都是指针,或者一个是一个空指针常量,而另一个是指针,那么结果类型是一个指向一个限定类型的指针,带有两个操作数都被引用的类型的类型限定符。此外,如果两个操作数都是指向兼容类型的指针或指向兼容类型不同限定版本的指针,那么结果类型是一个指向该复合类型的一个适当限定版本的指针;如果一个操作数是一个空指针常量,那么结果具有另一个操作数的类型;否则,一个操作数是一个指向void的指针,或者一个限定版本的void的指针,在这种情况下,结果类型是一个void适当限定版本的指针。

7、例 当第二个和第三个操作数是指针时的公共类型的结果以两个独立的阶段来判定。比如,适当的限定符,并不依赖于两个指针是否具有相兼容的类型。

8、给定声明

const void *c_vp;
void *vp;
const int *c_ip;
volatile int *v_ip;
int *ip;
const char *c_cp;

下列表的第三列是公共类型,作为一个条件表达式的结果。在此条件表达式中,头两个列是第二和第三个操作数(以任一次序):

c_vp    c_ip    const void *

v_ip    0    volatile int *

c_ip    v_ip     const volatile int *

vp    c_cp    const void *

ip    c_ip    void *

ISO/IEC 9899:2011 条款6.5.15——条件操作符的更多相关文章

  1. ISO/IEC 9899:2011 条款6.5.17——逗号操作符

    6.5.17 逗号操作符 语法 1.expression: assignment-expression expression    ,    assignment-expression 语义 2.一个 ...

  2. ISO/IEC 9899:2011 条款6.5.16——赋值操作符

    6.5.16 赋值操作符 语法 1.assignment-expression: conditional-expression unary-expression    assignment-opera ...

  3. ISO/IEC 9899:2011 条款6.5.6——加法操作符

    6.5.6 加法操作符 语法 1.additive-expression: multiplication-expression additive-expression    +    multipli ...

  4. ISO/IEC 9899:2011 条款6.5.2——后缀操作符

    6.5.2 后缀操作符 语法 1.postfix-expression: primary-expression postfix-expression    [    expression    ] p ...

  5. ISO/IEC 9899:2011 条款6.10.1——条件包含

    6.10.1 条件包含 约束 1.控制条件包含的表达式应该是一个整数常量表达式,除了:标识符(包括那些词法上与关键字相同的)被解析为以下所描述的:[注:因为控制常量表达式在翻译阶段4期间被计算,所以所 ...

  6. ISO/IEC 9899:2011 条款6.5.9——相等操作符

    6.5.9 相等操作符 语法 1.equality-expression: relational-expression equality-expression    ==    relational- ...

  7. ISO/IEC 9899:2011 条款6.5.5——乘法操作符

    6.5.5 乘法操作符 语法 1.multiplicative-expression: cast-expression multiplicative-expression    *    cast-e ...

  8. ISO/IEC 9899:2011 条款6.5.4——投射操作符

    6.5.4 投射操作符 语法 1.cast-expression: unary-expression (    type-name    )    cast-expression 约束 2.除非类型名 ...

  9. ISO/IEC 9899:2011 条款6.5——表达式

    6.5 表达式 1.一个表达式是操作符与操作数的一个序列,这些操作符与操作数指定了一个值的计算,或指派一个对象或一个函数,或是生成副作用,或执行上述操作的组合.对一个操作符的操作数的值计算顺序排在对该 ...

随机推荐

  1. 数据分析常用shell命令

    目录 0.vim编辑器 1.awk命令(重要) 1.1 基本语法 1.2 基本用法 1.3 运算符 1.4 内建变量 1.5 其他 1.6 awk是一门变成语言,支持条件判断.数组.循环等功能.所以我 ...

  2. WPF + SelfHost 实现窗体自宿主(API,API和窗体通信)

    前言 今天研究了在 WPF 中使用 SelfHost 自宿主. 具体的功能是,在 WPF 中使用自宿主服务,外部调用服务的 API,在 API 里面操作窗体的显示等. 技术点 在 WPF 中集成 Se ...

  3. Centos7安装nginx后提示“Welcome to nginx on Fedora!”,conf.d目录下无default.conf文件

    问题描述 在腾讯云centos7上安装nginx sudo yum install nginx 打开默认网页显示 Welcome to nginx on Fedora! 且 /etc/nginx/co ...

  4. 题解 UVa10892

    题目大意 多组数据,每组数据给定一个整数 \(n\),求满足 \(LCM(x,y)=n\) 的不同无序整数对 \((x,y)\) 的数目. 分析 若有 \(LCM(x,y)=n\),则有 \(GCD( ...

  5. Web开发技术---简单的登录验证

    制作一个APP或系统最基础的是登录界面,下面通过一个简单的登录注册界面的程序,来熟练掌握Web开发的技术. 一.知识点: 1.在网页界面获取用户的输入信息 2.标签的基本应用 3.用户输入结果的错误提 ...

  6. oracle: jdbcTypeForNull configuration property. Cause: java.sql.SQLException: 无效的列类型: 1111

    https://www.cnblogs.com/mmlw/p/5808072.html org.mybatis.spring.MyBatisSystemException: nested except ...

  7. 使用对象,面向对象创建div的方式

    <script> // //对象div的创建 // var div = document.createElement("div"); // document.body. ...

  8. Greenplum failed segment的恢复方法--primary与mirror都可修复

    当在使用greenplum过程中有不当的操作时,可能会出现segment节点宕掉的情况(比如在greenplum运行的过程中停掉其中几台segment节点的服务器),通过下面的方法可以恢复segmen ...

  9. The Last Goodbye 电影《霍比特人3:五军之战》插曲

    https://music.163.com/#/song?id=29755223 I saw the light fade from the sky我看到天空褪去色彩On the wind I hea ...

  10. learning java AWT 布局管理器CardLayout

    import javax.swing.*; import java.awt.*; import java.awt.event.ActionListener; public class CardLayo ...