赞
踩
这是一本非常经典C++书籍,也是我在工作中发现自己C++上还有很多薄弱点的时候经常拿来充电的。这本书内容很多,讲了很多如何高效地使用C++的方法,有些地方自己也没能啃透,读过一遍后很多知识点容易忘记,这次是一条一条地进行温习,之所以会分享出来是觉得对于程序员来说,好记性不如烂笔头,自己多动手往往在真正写程序的时候能够像条件反射一样写出好的代码。慢工出细活,对待技术要有谨慎和敬畏之心。
这本书推荐喜欢C++的人多读,对文中的一些观点可以自己进行实践,因为内容比较多,所以根据章节进行了划分,笔记中会有一些疑问,也是希望大家能够帮我解答,多多交流才能有提高。
导读
术语
声明式(declaration):这是告诉编译器名称和类型,略去了细节。
这几个常见的定义式:
extern int x; //具体的原因可以看扩展知识部分
std::size_t numDigits(int number);
class Widget;
template<typename T>;
class GraphNode;
定义式(definition):提供编译器声明式遗漏的细节(编译器会为变量分配内存)。
int x;
std::size_t numDigits(int number)
{
//your codes...
}
explicit用来阻止被用来执行隐式类型转换(implicit type conversions),它们可以用来进行显式类型转换(explicit type conversions),所以在声明构造函数的时候如果没有隐式类型转换的需求,尽量声明为explicit。(这里有个疑问,很多C++游戏引擎中的构造函数大部分都没有声明为explicit?)
copy构造函数和copy赋值函数的区别相信大家应该很熟悉了,一个小点需要注意,使用“=”语法也是可以用来调用copy构造函数的。
Widget w1; //default构造函数
Widget w2(w1); //copy构造函数
w1 = w2; //copy assignment操作符
Widget w3 = w2; //copy构造函数
扩展知识
(1) size_t只是一个typedef,是C++计算个数时所用的一个不带正负号的类型。
(2) extern置于函数或变量前表示该函数和变量定义在别的文件中,编译器会从其他模块中寻求定义,也就是表明了extern声明的变量只能是定义式,并没有分配内存,找到变量或函数的声明式时才能分配内存。
(3) extern同时也可以用来进行链接指定,常见的用法就是extern “C”,因为C++在编译的时候为了解决函数的多态问题,会将函数名和参数联合起来生成一个中间函数名,而C语言就不会,因此在链接阶段会出现找不到函数的情况,此时C函数就需要使用extern “C”来进行链接指定。如果想要知道链接的过程时怎么进行的,可以去看《程序员的自我修养》这本书,里面有很详细的解释,这本书我还没啃透,就不多啰嗦了。
(4) 与extern对应的关键字是static,被它修饰的全局变量和函数只能在本模块中使用。因此,一个函数或变量只可能被本模块使用时,其不可能被extern “C”修饰。
(5) extern常见的用法
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。