ISO/IEC 9899:2011 条款6.5.15——条件操作符
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——条件操作符的更多相关文章
- ISO/IEC 9899:2011 条款6.5.17——逗号操作符
6.5.17 逗号操作符 语法 1.expression: assignment-expression expression , assignment-expression 语义 2.一个 ...
- ISO/IEC 9899:2011 条款6.5.16——赋值操作符
6.5.16 赋值操作符 语法 1.assignment-expression: conditional-expression unary-expression assignment-opera ...
- ISO/IEC 9899:2011 条款6.5.6——加法操作符
6.5.6 加法操作符 语法 1.additive-expression: multiplication-expression additive-expression + multipli ...
- ISO/IEC 9899:2011 条款6.5.2——后缀操作符
6.5.2 后缀操作符 语法 1.postfix-expression: primary-expression postfix-expression [ expression ] p ...
- ISO/IEC 9899:2011 条款6.10.1——条件包含
6.10.1 条件包含 约束 1.控制条件包含的表达式应该是一个整数常量表达式,除了:标识符(包括那些词法上与关键字相同的)被解析为以下所描述的:[注:因为控制常量表达式在翻译阶段4期间被计算,所以所 ...
- ISO/IEC 9899:2011 条款6.5.9——相等操作符
6.5.9 相等操作符 语法 1.equality-expression: relational-expression equality-expression == relational- ...
- ISO/IEC 9899:2011 条款6.5.5——乘法操作符
6.5.5 乘法操作符 语法 1.multiplicative-expression: cast-expression multiplicative-expression * cast-e ...
- ISO/IEC 9899:2011 条款6.5.4——投射操作符
6.5.4 投射操作符 语法 1.cast-expression: unary-expression ( type-name ) cast-expression 约束 2.除非类型名 ...
- ISO/IEC 9899:2011 条款6.5——表达式
6.5 表达式 1.一个表达式是操作符与操作数的一个序列,这些操作符与操作数指定了一个值的计算,或指派一个对象或一个函数,或是生成副作用,或执行上述操作的组合.对一个操作符的操作数的值计算顺序排在对该 ...
随机推荐
- P,R,F1 等性能度量(二分类、多分类)
总结自<机器学习>周志华 2.3 目录 最常用的是查准率P(precision),查全率R(recall),F1 一.对于二分类问题 二.对于多分类问题 1.macro 2.micro 最 ...
- Java精通并发-自旋对于synchronized关键字的底层意义与价值分析以及互斥锁属性详解与Monitor对象特性解说【纯理论】
自旋对于synchronized关键字的底层意义与价值分析: 对于synchronized关键字的底层意义和价值分析,下面用纯理论的方式来对它进行阐述,自旋这个概念就会应运而生,还是很重要的,下面阐述 ...
- linux一些配置
ifconfig 查询.设置网卡和ip参数 ifup ens33 启动网卡 ifdown 关闭网卡 systemctl restart/start/stop network 重启.开始.关闭 网络服务 ...
- rxjs 入门--环境配置
原文: https://codingthesmartway.com/getting-started-with-rxjs-part-1-setting-up-the-development-enviro ...
- 不安装Oracle客户端使用PLSQL Developer
一.下载 1.Oracle Instant Client: (需要安装 Visual Studio 2013 redistributable.) basic-windows.x64-18.5下载地址: ...
- Vue中的插槽---slot
一:什么是插槽? 插槽(Slot)是Vue提出来的一个概念,正如名字一样,插槽用于决定将所携带的内容,插入到指定的某个位置,从而使模板分块,具有模块化的特质和更大的重用性. 插槽显不显示.怎样显示是由 ...
- matlab的diff()函数
diff():求差分 一阶差分 X = [1 1 2 3 5 8 13 21]; Y = diff(X) 结果: Y = 0 1 1 2 3 5 8 X = [1 1 1; 5 5 5; 25 25 ...
- ascii、unicode、utf-8、gbk 区别?
发展史: https://www.cnblogs.com/houxt/p/11250878.html python2内容进行编码(默认ascii),而python3对内容进行编码的默认为utf-8. ...
- sentinel主从切换技术
主从切换技术的方法是: 当主服务器宕机后,需要手动把一台从服务器切换为主服务器, 这就需要人工干预,费事费力,还会造成一段时间内服务不可用. 这不是一种推荐的方式,更多时候,我们优先考虑哨兵模式. 一 ...
- 初学 Size Balanced Tree(bzoj3224 tyvj1728 普通平衡树)
SBT(Size Balance Tree), 即一种通过子树大小(size)保持平衡的BST SBT的基本性质是:每个节点的size大小必须大于等于其兄弟的儿子的size大小: 当我们插入或者删除一 ...