概述
C++语法在这三个单元与C的语法十分相似,所以我只记录C++特有的语法特别是C++11标准的内容。
第4章 表达式
类型转换
隐式转换
1. 算术转换
整型提升
整型提升是把小正数类型转换成较大的整数类型。对于bool,char,signed char , unsigned char , short , unsigned short,只要他们的值可能存在int里,它们就会提升成int类型;否则提升成unsigned类型。
无符号类型的运算对象
- 像往常一样,首先执行整型提升。如果结果的类型匹配,无须进一步的转换。
- 如果一个运算对象是无符号类型,另外一个运算对象是带符号类型,其中的无符号类型不小于带符号类型,那么带符号类型会转换成无符号类型。
- 剩下一种情况是带符号类型大于无符号类型,此时转换的结果依赖于机器。
2. 其他隐式转换
数组转换成指针:在大多数用到数组的表达式中,数组自动转换成数组首元素的指针。
指针的转换:C++还规定了几种其他的指针转换方式,包括常量整数值0或者字面值nullptr能转换成任意指针类型。指向任意非常量的指针能转换成void*;指向任意对象的指针能转换成const void* 。
转换成布尔类型:存在一种从算术类型或指针类型向布尔类型自动转换的机制。如果指针或者算术类型的值为0,转换的结果是false,否则转换的结果是true:
转换成常量:允许指向非常量类型或指针类型转换为指向常量的指针,对于引用也是这样。
类类型定义的转换:类类型能定义由编译器自动执行的转换,不过编译器每次只能执行一种类类型的转换。
显示转换
1.static_cast
任何具有明确定义的类型转换,只要不包含底层const,都可以使用static_cast。例如
double slope = static_cast<double>(j)/i;
当需要把一个较大的算术类型赋给较小的类型时,static_cast非常有用。
const_cast
const char *pc;
char *p=const_cast<char *>pc;
一般称其为去掉const性质。
语句
throw语句
程序的异常检测部分使用throw表达式引发一个异常。
throw表达式包含关键字throw和紧随其后的一个表达式,其中表达式的类型就是抛出的异常类型。
try语句
try{
program-statements
}catch(exception-declaration){
handler-statements
}catch(exception-declaration){
handler-statements
}
函数
函数重载
如果同一作用域内的几个函数名字相同,但形参列表不同,我们称之为重载函数
void print(const char *cp);
void print(const int *beg,const int *end);
void print(const int ia[],size_t size);
这些函数接受的形参类型不一样,但是执行的操作非常类似。当调用这些函数时,编译器会根据传递的实参类型推断想要执行的是哪个函数:
main函数不能重载
定义重载函数
Record lookup(const Account&)
Record lookup(const Phone&)
Record lookup(const Name&)
其中,虽然我们定义的三个函数不同,但它们都有一个名字。编译器根据实参的类型确定应该调用哪一个函数。
但是不允许两个函数除了返回类型外其他要素都相同。
重载和const形参
Record lookup(Phone)
Record lookup(const Phone)//重复声明了Record lookup(Phone)
Record lookup(Phone *)
Record lookup(Phone * const)//重复声明了Record lookup(Phone *)
一个拥有顶层const的形参没有办法与另一个没有顶层const的形参区分开来
Record lookup(Account&)
Record lookup(const Account&)
Record lookup(Account*)
Record lookup(const Account*)
另一方面,可以通过区分其指向的是常量还是非常量实现函数重载。
特殊用途语言特性
默认实参
typedef string::size_type sz;
string screen(sz ht = 24,sz wid = 80,char backgrnd = ' ')
某些函数有这样一种形参,在函数多次调用中它们都被赋予一个相同的值,此时,我们把这个反复出现的值称为函数的默认实参。
内联函数和constexpr函数
内联函数可避免函数调用的开销
在大多数机器上,一次函数调用其实包含着一系列工作:调用前要先保存寄存器,并在返回时恢复:可能需要拷贝实参;程序转向一个新的位置继续执行。
将函数指定为内联函数(inline),通常就是将它在调用点上“内联地”展开。
constexpr函数
constexpr函数是指能用于常量表达式的函数。
- 函数的返回类型及所有的形参类型都得是字面值类型。
- 有且只有一个return 语句。
最后
以上就是诚心香烟为你收集整理的C++Primer 学习笔记——第4,5,6章 表达式,语句和函数第4章 表达式语句函数特殊用途语言特性的全部内容,希望文章能够帮你解决C++Primer 学习笔记——第4,5,6章 表达式,语句和函数第4章 表达式语句函数特殊用途语言特性所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复