首先,请参考上节课我们提到的运算符总览
今天我们主要讲解下面几个运算符:
()圆括弧运算符
{}组合运算符
::作用域解析
throw运算符
,逗号运算符
()圆括弧运算符
使用示例:
a*(b+c) (b>=a)&&(c<=a) (a%(b/c))*d特点说明:
1 圆括弧拥有优先执行权限。即运算表达式时,优先运算圆括弧内的表达。
2 圆括弧可以嵌套,嵌套时内部的圆括弧拥有更高的优先级。
注意:
由于()作为圆括弧运算符的时候,里面的表达式不可以为空,也不可以有多个语句,所以可以看做是一个单目运算符
虽然可以在其内部使用逗号,但是整个逗号运算表达式最后是作为一个表达式给圆括弧的
使用技巧:
圆括弧通常用来规范表达式的运算优先级,确保表达式按照开发者的预期优先级进行运算。
看过上一篇的同学们应该都有了这种共识:运算符本身的优先级并不可靠!
而圆括弧就是解决这种不可靠的唯一武器!
{}组合运算符
使用示例:
void test() { int a[]={0,1,2,3}; { int a = 0; a++; } }特点说明:
1 可以用于函数实体定义、复杂数据类型定义
复杂数据类型包括:联合体、枚举、结构体、类等等
2 可以用户数组内容初始化
包括基本数据类型数组、复杂数据类型数组等等
3 可以构建子作用域
子作用域内部可以重新定义变量,甚至可以无视外部作用域定义的变量
比如示例中,我已经定义了a为数组。但是在子作用域中,我可以再次定义a为整数
在整个子作用域中,a都将作为整数看待,而数组a则在子作用域不可见。
同样的,子作用域定义的整数a,外部也不可见。
再想想第8课,循环语句详解中,for和while后面的{}
其实可以解释为对子作用域进行循环执行。这样看来for(){}其实和for()语句;是等同的
注意:由于组合运算符内部可以为空,也可以有任意多条语句。所以该运算符目数无法确定
使用技巧:
在调试阶段,我们需要一些代码来帮助调试。这个时候我们可以将这些代码放入组合运算符内。这样里面的符号定义就不会影响外部的代码。
避免由于添加了调试代码,引入了新的不可靠因素。
::作用域运解析算符(仅限C++)
使用示例:
std::list<int> lstTmp; std::cin in; ::全局变量名特点说明:
1 当引用全局变量的时候符号前面可以不用输入域名。但这并不表明符号是单目,只是隐含了一个全局域而已
2 该符号其实仅仅在编译阶段有用,实际运行的时候不会增加计算机的运算量
使用技巧:
在多个代码模块同时开发的时候,一个比较常见的问题是,大家都碰巧定义同一个变量名、复杂数据名。
如果要修改代码,这又太麻烦了,而且容易引入更多的错误。而这个时候使用作用域就是一个好办法。
关于作用域、名称空间,我们后面会讲到。这里简单说明一下,这些都是为了解决同名的问题而制定的。
这样,我只要注明这个变量或名称来自哪个作用域,就可以解决大家重名的问题。大家开发代码的时候就再也不用担心这个问题了。
throw 运算符(仅限C++)
使用示例:
if(a==0) throw 0;特点说明:
1 该运算符将会抛出一个异常。有关异常的内容,后面会涉及,这里只是提一下
使用技巧:
1 该运算符可以抛出基本变量类型、自定义变量类型以及对象
2 该运算符必须和catch配合,否则抛出的异常会被系统捕获
,逗号运算符
使用示例:
int a = 0; a = a + 1, a + 2, a + 3; printf("a= a + 1, a + 2, a + 3 %d\n",a); <pre name="code" class="cpp"> a = 0;a = (a + 1, a + 2, a + 3);
printf("a= (a + 1, a + 2, a + 3) %d\n",a);
1 计算的时候,从左向右计算。注意示例,为什么第一个输出的是1,而后面一个输出的是3?因为赋值运算符的优先级更高!!
2 逗号运算符是一个双目运算,编译器不允许出现a,或者,a这样的情况
使用技巧:
1 可以在while中使用:
a = 0; while ((a++),a < 3){ printf("a=%d\n", a); }注意这个循环只被执行2次,输出的是a=1 a=2
2 在for的初始化和每次循环的变化条件处理中使用
for(i=0,j=0;i<10;i++,j+=2)
待续……
原文地址:http://blog.csdn.net/zerglurker/article/details/46493899