逗号运算符:,
允许对两个语句进行分组,其中有一个是预期的。
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。计算该操作数,并在继续前完成所有副作用。
前面列表中没有的第二个和第三个操作数的任意组合都是非法的。结果的类型是通用类型,如果第二个和第三个操作数是同一类型且都是左值,则结果为左值。
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++中的函数调用和下标以及成员访问运算符的重载详解C++编程中一元运算符的重载详解C++语言中的加法运算符与赋值运算符的用法C++编程中的或||、与&&、非!逻辑运算符基本用法整理深入解析C++编程中的运算符重载详解C++中new运算符和delete运算符的使用简单了解C++语言中的二元运算符和赋值运算符详解C++中const_cast与reinterpret_cast运算符的用法讲解C++编程中Address-of运算符&的作用及用法详解C++编程中的sizeof运算符与typeid运算符C++编程中删除运算符与相等运算符的使用解析深入解析C++编程中__alignof 与__uuidof运算符的使用C++中的运算符和运算符优先级总结