读书笔记_Effective C++_习惯C++

这是一本非常经典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常见的用法࿱

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值