条件操作符和sizeof操作符

来源:互联网 发布:fft算法 acm 编辑:程序博客网 时间:2024/06/16 04:45

1. 条件操作符

条件操作符是C++中唯一的三元操作符,它允许将简单的if-els判断语句嵌入表达式中。条件操作符的语法格式为:

cond ? expr1 ; expr2;

1.1 避免条件操作符的深度嵌套

int max = i > j           ? i > k ? i : k          ? j > k ? j : k;

可以用更长但更简单的比较语句实现相同的功能:

int max = i;if (j > max)    max = j;if(k > max)    max = k;

1.2 在输出表达式中使用条件操作符

条件操作符的优先级相当低。当我们要在一个更大的表达式中嵌入条件表达式时,通常必须用圆括号把条件表达式括起来。例如,经常使用条件操作符根据一定的条件输出一个或另一个值,在输出表达式中,如果不严格使用圆括号将条件操作符括起来,将会得到意外的结果:

cout << (i < j ? i : j); // ok: prints larger of i and jcout << (i < j) ? i : j; // prints 1 or 0;cout << i < j ? i : j; // error: compares cout to int

2. sizeof操作符

sizeof操作符的作用是返回一个对象或类型名的长度,返回值的类型是size_t,长度的单位是字节。sizeof表达式的结果是编译时变量,有以下三种语法形式:

sizeof (type name) ;
sizeof (expr) ;
sizeof expr ;

将sizeof应用到表达式expr 上,将获得该表达式的结果的类型长度:

Sales_item item,  *p;//three ways to obtain size required to hold an object of type Sales_itemsizeof(Sales_item); //size required to hold an object of type Sale_itemsizeof item; //size of item's type, e.g., sizeof(Sales_item)sizeof *p;; //size of type to which p points, e.g.sizeof(Sales_item)

将sizeof用于expr 时,并没有计算表达式expr 的值,特别是在sizeof *p中,指针p可以持有一个无效地址,因为不需要对p做解引用操作。
使用sizeof的结果部分地依赖所涉及的类型:
1,对char类型或者值为char类型的表达式做sizeof操作保证得1。
2,对引用类型做sizeof操作将返回存放此引用类型对象所需的内存空间大小。
3,对指针做sizeof操作将返回存放指针所需的内存大小;注意,如果要获取该指针所指向的对象的大小,则必须对该指针进行解引用。
4,对数组做sizeof操作等效于将对其元素类型做sizeof操作的结果乘上数组元素的个数。
因为sizeof返回整个数组在内存中的存储长度,所以用sizeof数组的结果除以sizeof其元素类型的结果,即可求出数组元素的个数:

// sizeof (ia) / sizeof (*ia) return the number of element in ia
int sz = sizeof (ia) / sizeof (*ia);

0 0
原创粉丝点击