表达式
算术运算符
一元运算符的优先级最高,其次是乘除法,优先级最低的是加减法。
所有运算符都满足做结合律,当优先级相同时,按照从左向右的顺序进行组合。
逻辑和关系运算符
! 逻辑非
&& || 逻辑与 逻辑或
< > <= >=
== !=
关系运算符比较运算对象的大小关系返回布尔值,进行比较运算时,除非比较的对象是布尔类型,否则不要使用布尔型字面值作为运算对象。
if(val){...} %如果val是任意的非零值,条件为真
if(!val){...} %如果val是0条件为真
if(val==1){...}
赋值运算符
赋值运算符满足又结合律,赋值运算符优先级较低。
递增和递减运算符
递增和递减运算符有两种形式,前置版本和后置版本。
int i=0,j;
j=++i;%j=1,i=1 前纸版本得到的是递增之后的值
j=i++;%j=1,i=2 后置版本得到的是递增之前的值
除非必须,否则不适用递增或递减运算符的后置版本。
如果在一条复合表达式中即将变量+1、-1,又能使用他原来的值,就使用递增递减运算符的后置版本。
auto p=v.begin();
while(p!=v.end()&&*p>=0)
cout<*p++<<endl;%输出当前值,并将p向前挪动一个元素
% *p++ 等价于 *p ++p写法更简洁。
成员访问运算符
.点运算符和->箭头运算符都可以用于成员访问。
n=(*p).size();%解引用运算符优先级低于点运算符,*p要加括号
n=p->size();
条件运算符
条件运算符将简单的if-else逻辑嵌入到单个表达式中。
cond?expr1:expr2;
条件运算符可嵌套使用,最好别超过两到三层。
位运算符
~ %位求反
<< %左移
>> %右移
& %位与
^ %位异或
| %位或
sizeof运算符
sizeof运算符返回一条表达式或一个类型名字所占的字节数。
sizeof(char)结果为1;
对引用类型执行sizeof运算得到被引用对象所占空间的大小;
对指针执行sizeof运算得到指针本身所占空间的大小;
对解引用指针执行sizeof运算得到指针指向的对象所占空间的大小,指针不需有效;
对数组执行sizeof运算得到整个数组所占空间的大小;
对string对象或这vector对象执行sizeof运算只返回该类型固定部分的大小。
逗号运算符
含有两个运算对象,按照从左向右的顺序依次求值.
for(...;...;++ix,--cnt)
类型转换
隐式转换 (数组转换成指针,指针的转换)
显式转换
命名的强制类型转换
cast-name<type>(expression)
static_cast
%任何具有明确定义的类型转换,只要不包含底层const,都可以使用static_const
double slope = static_cast<double>(j) / i;
dynamic_cast
%只用于对象的指针和引用.
const_cast
%const_cast只能改变运算对象的底层const。
const char *pc;
char *p=const_cast<char*>(pc);
reinterpret_cast
%通常为运算对象的位模式提供较低层次上的重新解释。本质上依赖于机器,使用reinterpret_cast是非常危险的。
语句
条件语句
if语句
if(condition)
statement1
else
statement2
switch语句
switch(ch){
case'a':
;
break;
case'b':
;
break;
case'c':
{
;%如果需要为某个分支定义并初始化一个变量,将变量定义在块内
}
break;
default:
;
break;
}
迭代语句
while语句
while(condition)
statement
当不确定到底要迭代多少次时,使用while循环比较合适。
for语句
for(init-satatmen;condition;expression)
statement
for(declaration:expression)
statement
do-while语句
do
statement
while(condition);
do while语句是先执行循环体后检查条件,不管条件的值如何,至少执行一次循环。
跳转语句
break语句
只能出现在迭代语句和switch语句内部,作用范围仅限于最近的循环或者switch。
continue语句
continue语句终止最近的循环中的当前迭代并立即开始下一次迭代,只能出现在for while 和do-while循环内部。
while(cin>>buf&&!buf.empty()){
if(buf[0]!='_')
continue;%接着读下一个输入
}
goto语句
goto语句的作用是从goto语句无条件跳转到同一函数内的另一条语句。不要在程序中使用goto语句,因为它使得程序既难理解又难修改。
end:return;%带标签语句
goto end;
try语句块和异常处理
- 异常检测部分使用throw表达式表示他遇到了无法处理的问题
- 使用try语句块处理异常,try语句块以关键字try开始,以一个或多个catch语句结束
- 一套异常类用于在throw表达式和相关的catch子句之间传递异常具体信息。
if(a == 0)
{
throw "there have zero sorry\n"; //引发异常
}
try
{
cout << "..";
}
catch(const char *str) 接收异常,处理异常
{
cout << str;
cerr <<"除数为0\n";
}
C++标准库定义了一组类用于报告标准库函数遇到的问题。
- exception头文件
- stdexcept 头文件
- new头文件
- type_info头文件