C++拾遗(五)语句相关

前缀格式与后缀格式

对于表达式:后缀如 i++ 表达式的值仍是 i,在遇到下一个顺序点后再将 i 加1。前缀 ++i 表达式的值就是(i+1),先计算表达式的值,不需要等待      顺序点。

对于类:前缀函数效率比后缀函数高,后缀函数需要首先复制一个拷贝,加 1 完成后将复制的拷贝返回。而前缀函数是将值加 1 再返回结果,不需要拷贝。

对于指针: * 和 ++前缀 、--前缀的优先级相同,以从右到左的方式结合。这意味着:

  1. *++pt 表示先对 pt 指针加 1 ,再取加 1 后的 pt 指向的值。
  2. ++*pt 表示先取 pt 指针指向的值,再对 pt 指向的值加1。

     ++后缀和--后缀优先级相同且高于前缀。这意味着:

  1. (*pt)++ 表示先取pt指向的值,再对这个值加 1 。
  2. *pt++ 中++操作符先作用于pt,但是由于是后缀操作符,所以仍然取pt指向的值,在执行到下一个顺序点后,再对pt加 1 。

逗号操作符

逗号表达式的值是第二部分的值,如 i = ( 10, 200 );i 的值是200。但是逗号操作符的优先级最低,所以如 i = 10, 200; i 的值为10。

字符串比较

Char数组的数组名与字符串比较不能使用==操作符,应使用strcmp();若字符串相等,则返回0;若字符串不相等则返回1。

strcmp(str1,str2);

strcmp(str1,str2)<0;则str1在str2前面。

strcmp(str1,str2)>0;则str1在str2后面。

类型别名

C++的两种方式:

  1. 预处理器方式:使用#define aliasName typeName

这种方法使得程序在编译时用typeName替换掉aliasName。但是这仅仅是字符的替换,也就是说对于一系列变量的声明不适用。

例如:#define FLOAT_POINTER float *

   FLOAT_POINTER pa, pb;

只是替换为 float * pa, pb; 这时pa是一个指针,然而pb还是一个float变量。

  2. typedef typeName aliasName;

这种方法能处理复杂的类型别名。

 逻辑操作符

||和&&都是顺序点,即先计算左侧的值再进行右侧的判断。

&&操作符优先级高于||。

?:操作符

C++中唯一一个需要三个操作数的操作符。

ex1 ? ex2 : ex3

若ex1的值为true,则表达式值为ex2的值;

若ex1的值为false,则表达式值为ex3的值。

switch细节相关

标签必须是单独的整数(包括char和enum)。

case只是行标签,跳到该标签后将依次执行之后的所有语句除非用break跳出。

如果标签均不匹配,则跳到default处执行;如果此时没有default,则跳出switch执行之后的语句。

posted on 2016-03-30 09:45  DeathKnightH  阅读(243)  评论(0)    收藏  举报

导航