C++编程中逗号运算符和条件运算符的使用方法讲解
逗号运算符:,
允许对两个语句进行分组,其中有一个是预期的。
expression , expression
备注
逗号运算符具有从左向右的关联性。 由逗号分隔的两个表达式将从左向右进行计算。 始终计算左操作数,并且在计算右操作数之前将完成所有副作用。
在某些上下文(如函数参数列表)中,逗号可用作分隔符。 不要将该逗号用作分隔符与将其用作运算符的情况混淆;这两种用法完全不同。
考虑表达式
e1 , e2
该表达式的类型和值是 e2 的类型和值;e1 的计算结果将被丢弃。 如果右操作数是左值,则结果为左值。
在通常将逗号用作分隔符的方案中(例如,在函数或聚合初始值设定项的实参中),逗号运算符及其操作数必须包含在括号中。 例如:
func_one( x, y + 2, z ); func_two( (x--, y + 2), z );
在上面的对 func_one 的函数调用中,会传递以逗号分隔的三个参数:x、y + 2 和 z。 在对 func_two 的函数调用中,圆括号强制编译器将第一个逗号解释为顺序计算运算符。 此函数调用将两个参数传递给 func_two。 第一个参数是顺序计算运算 (x--, y + 2) 的结果,具有表达式 y + 2 的值和类型;第二个参数为 z。
示例
// cpp_comma_operator.cpp #include <stdio.h> int main () { int i = 10, b = 20, c= 30; i = b, c; printf("%i\n", i); i = (b, c); printf("%i\n", i); }
20 30
条件运算符:? :
语法
expression ? expression : expression
备注
条件运算符 (? :) 是一个三元运算符(采用三个操作数)。条件运算符按以下方式运行:
第一个操作数隐式转换为 bool。计算该操作数,并在继续前完成所有副作用。
- 如果第一个操作数的计算结果为 true (1),则计算第二个操作数。
- 如果第一个操作数的计算结果为 false (0),则计算第三个操作数。
- 条件运算符的结果是操作数(无论是第二个还是第三个)的计算结果。只有最后两个操作数之一在条件表达式中计算。
- 条件表达式具有从右到左的关联性。第一个操作数必须是整数或指针类型。以下规则适用于第二个和第三个操作数:
- 如果两个操作数是相同的类型,则结果也是该类型。
- 如果两个操作数都是算术或枚举类型,则执行常用算术转换(在算术转换中有述)来将它们转换为通用类型。
- 如果两个操作数都是指针类型,或者一个是指针类型,另一个是计算结果为 0 的常量表达式,则执行指针转换来将它们转换为通用类型。
- 如果两个操作数都是引用类型,则执行引用转换来将它们转换为通用类型。
- 如果两个操作数都是 void 类型,则通用类型是 void 类型。
- 如果两个操作数是相同的用户定义类型,则通用类型也是该类型。
- 如果操作数是不同的类型,而且至少有一个操作数是用户定义类型,则使用语言规则来确定通用类型。(请参阅下面的警告。)
前面列表中没有的第二个和第三个操作数的任意组合都是非法的。结果的类型是通用类型,如果第二个和第三个操作数是同一类型且都是左值,则结果为左值。
System_CAPS_warning警告
如果第二个和第三个操作数的类型不相同,则会按 C++ 标准中的指定调用复杂类型转换规则。这些转换可能会导致意外行为,包括构造和析构临时对象。为此,我们强烈建议:(1) 避免将用户定义的类型用作带条件运算符的操作数;(2) 如果确实要使用用户定义的类型,务必将每个操作数显式转换为通用类型。
// expre_Expressions_with_the_Conditional_Operator.cpp // compile with: /EHsc // Demonstrate conditional operator #include <iostream> using namespace std; int main() { int i = 1, j = 2; cout << ( i > j ? i : j ) << " is greater." << endl; }
栏 目:C语言
本文地址:https://www.xiuzhanwang.com/a1/Cyuyan/2573.html
您可能感兴趣的文章
- 04-02func函数+在C语言 func函数在c语言中
- 04-02c语言中对数函数的表达式 c语言中对数怎么表达
- 04-02c语言没有round函数 round c语言
- 04-02C语言中怎么打出三角函数 c语言中怎么打出三角函数的值
- 01-10深入理解C++中常见的关键字含义
- 01-10使用C++实现全排列算法的方法详解
- 01-10深入Main函数中的参数argc,argv的使用详解
- 01-10APUE笔记之:进程环境详解
- 01-10c++中inline的用法分析
- 01-10如何寻找数组中的第二大数
阅读排行
本栏相关
- 04-02c语言函数调用后清空内存 c语言调用
- 04-02func函数+在C语言 func函数在c语言中
- 04-02c语言的正则匹配函数 c语言正则表达
- 04-02c语言用函数写分段 用c语言表示分段
- 04-02c语言中对数函数的表达式 c语言中对
- 04-02c语言编写函数冒泡排序 c语言冒泡排
- 04-02c语言没有round函数 round c语言
- 04-02c语言分段函数怎么求 用c语言求分段
- 04-02C语言中怎么打出三角函数 c语言中怎
- 04-02c语言调用函数求fibo C语言调用函数求
随机阅读
- 08-05织梦dedecms什么时候用栏目交叉功能?
- 01-10使用C语言求解扑克牌的顺子及n个骰子
- 01-10SublimeText编译C开发环境设置
- 01-10C#中split用法实例总结
- 08-05DEDE织梦data目录下的sessions文件夹有什
- 01-11Mac OSX 打开原生自带读写NTFS功能(图文
- 01-11ajax实现页面的局部加载
- 01-10delphi制作wav文件的方法
- 04-02jquery与jsp,用jquery
- 08-05dedecms(织梦)副栏目数量限制代码修改