- 表达式,程序的最基本单元,是指从一些操作数中计算一些值,最简单的表达式是字面常量,例如10,“a”,3.14,“CSDN”。
- 变量名是一种表达式,变量表示与名字对应的对象。
例如,int name = 100; //name 是左值,表示变量
int length = name; //name是右值,表示值
加减乘除,运算顺序,加括号。 - 常量表达式,我们在程序中,会用到像数字π,英寸转厘米2.54,这种是不会改变的值,我们一般不会直接拿来用,给它用一个符号来表示。在C++中,我们用符号常量来表示那些初始化后不再改变的值。
- 除了个别情况(0和1),我们应该尽量少的使用字面常量,而多使用符号常量。不能被直接识别的字面常量,被戏称为魔术常量
- 常量表达式,是指仅有常量构成的整型值表达式。例如
constexpr int max = 17;
int val = 29;
max = max + 2;//是常量表达式
max = val + 2;//不是常量表达式 - 一个constexpr必须给定一个在编译时已知的值
constexpr int max = 100;
void use(int n){
constexpr int c1 = max + 2;
constexpr int c2 = n + 2;//错误,不知道c2是多少
}
- 若某个变量初始化的值在编译时未知,但初始化后也绝不改变,这种情况,用常量const,
constexpr int max = 100;
void use(int n){
constexpr int c1 = max + 2;
const int c2 = n + 2;
c2 = 7;//错误,c2是常量
}
-
用const的原因有两个:
一是C++98不支持constexpr,所以用const
二是不是常量表达式(值在编译时未知)但初始化后不予许改变的“变量” -
类型转换,我们用type{value}或type(value),但是type{value}能够避免窄化,
窄化有double到int,char到int。 -
语句,包括表达式语句和声明语句,表达式语句包括赋值语句、I/O语句和函数调用,此外,还有空语句。
-
if (){} else if (){} else{}
-
switch(){case"~": break; default: break;}
-
switch使用的一些细节,
1.switch的括号中必须是整数、字符型和枚举型,特别地,不能为字符串。
2.case语句中的值必须是常量表达式,不能使用变量。
3.不能有两个重复的case
4.允许一个case语句中有多个case
5.切记不要忘了给每个case后加一个break; 这个错误编译器不会给出警告
6.如果要对string型进行选择,只能用if或者map
7.如果采用同样的操作对不同的case,可以省写
switch(t){
case ‘a’:case ‘b’:case ‘c’:
cout<<“…”<<“\n”;
}
8.对于下边这段代码,是特别容易犯错的
swtich(num){
case 1:
cout<<“one”;
case 2:
cout<<“two”;
break;
}
如果输入 1,它将输出onetwo,而不会中间停止
9.switch能够对一组常量产生优化代码,特别是常量数目很多的时候,switch语句比if嵌套语句更优秀 -
循环,也称为迭代。while语句循环控制变量必须在while语句定义 和初始化之前定义,否则编译器将返回一个错误。
-
字符 ‘b’可以通过char (‘a’+1)得到,字符‘c’可以通过(‘b’+1)得到
-
{和}包围起来的语句称为程序块或复合语句。程序块是一种特殊的语句,不包含任何语句的程序块也是可以的,它表示什么也不做。
-
和while相比,for更易理解和维护,因为for循环的语句的初始化、循环条件和循环增量是放在开头的,并且,我们不应该随意在循环里边修改循环增量 ,这样容易对程序员造成误解。
-
范围for循环
for(要遍历的数据类型 遍历变量:遍历对象)
注意:
1.遍历变量的数据类型要和遍历对象一致
2.范围for循环的循环体中不能有改变容器大小的操作 -
函数
类型 函数名(参数表)函数体
参数表每一个元素为一个参数或形式参数,也可以为空。
当函数不需要返回任何值时,返回类型为void。
函数声明,是为了将函数定义和调用相分离的一种方法。它是一种与函数定影相分离的方法来显示函数信息。