5.1 for循环
for循环的组成部分
for (initialization; test-expression; update-expression)
body
test-expression的值并没有被限制为只能真或者假,可以使用任意表达式。对于不为0的数,C++将结果强制转换为true,为0则转换为false,导致循环结束。
例如
for (i = 5; i; i--){
}
上面test-expression的i并不是一个逻辑判断式。
表达式与语句
我们允许x=y=0这样的而连续赋值。
下面这段代码指出了关于表达式值的方面,注意因为<<运算符优先级高于=,所以需要加括号
- x=100 输出为100
- x<3 输出为0或1
- cout.setf(ios_base::boolalpha); x<3 输出为true或false
#include <iostream>
int main() {
using namespace std;
int x;
cout << "The expressionx=100has the value ";
cout << (x = 100) << endl;
cout << "The expression x<3 has the value ";
cout << (x < 3) << endl;
cout.setf(ios_base::boolalpha);
cout << "after cout.setf(ios_base::boolalpha). The expression x<3 has the value ";
cout << (x < 3) << endl;
return 0;
}
结果如下
还有一些关于语句,表达式,值的概念,看看就好
前缀格式和后缀格式
指针和前缀++和后缀++的优先级是什么样的呢
指针和前缀++的优先级相同,后缀++的优先级最高。
例如以下例子
C 风格字符串的比较
因为比较的是地址,所以两个长度不同的字符串也可以相等,我们应该用strcmp函数。
但是我们可以对string类直接进行==比较,因为这个运算符被重载了。只要运算符的一边是string类就行,另外一边可以是c风格字符串。
6.3 字符函数库cctype
当你想判断一个字符是否是空格、字母、数字时,有一个自带的函数库可以使用。
你可能会想说,为什么我们不用( ch >= ‘a’ && ch <= ‘z’ )这样的写法呢?原因是这对于其他字符的编码,a-z不一定连续。
6.5 switch 语句
- switch语句只支持int, char和枚举,不能处理浮点
- 当情况超过2个,switch的运行效率高于if else
- 如果case语句中没有break语句,则会往下执行其他case。这样的设计有助于处理多个case标签