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. Angular CLI behind the scenes, part one

    原文:https://commandlinefanatic.com/cgi-bin/showarticle.cgi?article=art074 --------------------------- ...

  2. 「NOI2012」骑行川藏

    「NOI2012」骑行川藏 题目描述 蛋蛋非常热衷于挑战自我,今年暑假他准备沿川藏线骑着自行车从成都前往拉萨. 川藏线的沿途有着非常美丽的风景,但在这一路上也有着很多的艰难险阻,路况变化多端,而蛋蛋的 ...

  3. Backpack IV

    Description Given an integer array nums[] which contains n unique positive numbers, num[i] indicate ...

  4. RestTemplate 使用中的几个问题

    Spring Boot使用RestTemplate消费REST服务的几个问题记录 我们可以通过Spring Boot快速开发REST接口,同时也可能需要在实现接口的过程中,通过Spring Boot调 ...

  5. Apache Kylin在美团点评的应用

      本文原载自大数据杂谈微信公众号. 感谢美团点评工程师高大月撰文并授权转载. 高大月,美团点评工程师,Apache Kylin PMC成员,目前主要在美团点评数据平台负责OLAP查询引擎的建设. 背 ...

  6. Kubernetes 学习18配置网络插件flannel

    一.概述 1.我们在学习docker时知道docker有四种常用的网络模型 a.bridge:桥接式网络 b.joined:联盟式网络,共享使用另外一个容器的网络名称空间 b.opened:容器直接共 ...

  7. 转载 C# 开源框架(整理)

    C# 开源框架(整理)http://www.cnblogs.com/gaoyuchuanIT/articles/5612268.html Json.NET http://json.codeplex.c ...

  8. PDB符号文件浏览工具介绍

    一.SymView SymView工具用来显示符号文件中包含的符号表和符号数据.目前支持微软的Visual C/C++和C#编译器产生的DBG格式的符号文件和PDB格式的符号文件. SymView提供 ...

  9. UOJ#221. 【NOI2016】循环之美 数论,杜教筛

    原文链接www.cnblogs.com/zhouzhendong/p/UOJ221.html 题解 首先把题目转化为求 \[\sum_{x=1}^n \sum_{y=1}^m [\gcd(x,y) = ...

  10. ubuntu 14.04 系统配置磁盘,CPU,内存,硬盘信息查看

    Linux查看物理CPU个数.核数.逻辑CPU个数# 总核数 = 物理CPU个数 X 每颗物理CPU的核数 # 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 查看分区磁盘 ...