《C++ Primer》知识点总结
树图思维导图提供 《C++ Primer》知识点总结(四) 在线思维导图免费制作,点击“编辑”按钮,可对 《C++ Primer》知识点总结(四) 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:57ac5d02c24062bf3cf3a47efbd20348
《C++ Primer》知识点总结(四)思维导图模板大纲
sizeof运算符返回一条表达式或一个类型名字所占的字节数,其所得值是一个size_t类型的常量表达式。
sizeof(type)
sizeof expr
Sales_data data, *p; sizeof(Sales_data); //存储Sales_data类型的对象所占的空间大小 sizeof data; //data的类型的大小,即sizeof(Sales_data) sizeof data.revenue; //Sales_data得revenue成员对应类型的大小 sizeof Sales_data::revenue; //另一种获取revenue大小的方式
sizeof运算符的结果部分地依赖于其作用的类型
对char或者类型为char的表达式执行sizeof运算,结果得1
对引用类型执行sizeof运算得到被引用对象所占空间的大小
对指针执行sizeof运算得到指针本身所占空间的大小
对解引用指针执行sizeof运算得到指针指向的对象所占空间的大小,指针不需有效
对数据执行sizeof运算得到整个数组所占空间的大小,等价于对数组中所有的元素各执行一次sizeof运算并将所得结果求和。注意,sizeof运算不会把数组转换成指针来处理
对string对象或vector对象执行sizeof运算只返回该类型固定部分的大小,不会计算对象中元素占用了多少空间
throw表达式
异常检测部分使用throw表达式来表示它遇到了无法处理的问题
try语句块
异常处理部分使用try语句块处理异常
异常类
用于在throw表达式和相关的catch子句之间传递异常的具体信息
throw表达式
try语句块
try{ program-statements //正常逻辑 } catch (exception-declaration){ //异常声明1 handler-statements } catch (exception-declaration){ //异常声明2 handler-statements } // ...
常见异常类
exception 最常见的问题
runtime_error 只有在运行时才能检测出的问题
range_error 运行时错误:生成的结果超出了有意义的值域范围
overflow_error 运行时错误:计算上溢
underflow_error 运行时错误:计算下溢
logic_error 程序逻辑错误
domain_error 逻辑错误:参数对应的结果值不存在
invalid_argument 逻辑错误:无效参数
length_error 逻辑错误:试图创建一个超出该类型最大长度的对象
out_of_range 逻辑错误:使用一个超出有效范围的值
内联函数
相当于把内联函数里面的内容写在调用内联函数处
相当于不用执行进入函数的步骤,直接执行函数体
相当于宏,却比宏多了类型检查,真正具有函数特性
编译器一般不内联包含循环、递归、switch 等复杂操作的内联函数
在类声明中定义的函数,除了虚函数的其他函数都会自动隐式地当成内联函数
inline int functionName(int first, int second,...); // 声明2(不加 inline) int functionName(int first, int second,...); // 定义 inline int functionName(int first, int second,...) {/****/};
将 inline 函数体复制到 inline 函数调用点处
为所用 inline 函数中的局部变量分配内存空间
将 inline 函数的的输入参数和返回值映射到调用方法的局部变量空间中
如果 inline 函数有多个返回点,将其转变为 inline 函数代码块末尾的分支(使用 GOTO)
优点
内联函数同宏函数一样将在被调用处进行代码展开,省去了参数压栈、栈帧开辟与回收,结果返回等,从而提高程序运行速度
内联函数相比宏函数来说,在代码展开时,会做安全检查或自动类型转换(同普通函数),而宏定义则不会
在类中声明同时定义的成员函数,自动转化为内联函数,因此内联函数可以访问类的成员变量,宏定义则不能
内联函数在运行时可调试,而宏定义不可以
缺点
代码膨胀
内联是以代码膨胀(复制)为代价,消除函数调用带来的开销。如果执行函数体内代码的时间,相比于函数调用的开销较大,那么效率的收获会很少
inline 函数无法随着函数库升级而升级
是否内联,程序员不可控
树图思维导图提供 《C++ Primer》知识点总结(五) 在线思维导图免费制作,点击“编辑”按钮,可对 《C++ Primer》知识点总结(五) 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:5725866dfdc79fd02c7c7625ad607eb3
树图思维导图提供 《C++ Primer》知识点总结(三) 在线思维导图免费制作,点击“编辑”按钮,可对 《C++ Primer》知识点总结(三) 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:de3eeb9f11fa6ac31d801a50b532be6c