Effective C++ 阅读笔记之Chapter1

本文是作者雨墨阅读《Effective C++》的第一章笔记,主要探讨了C++中的宏定义、const常量、顶层与底层const的区别以及静态对象的初始化问题。建议使用const替代宏,理解const成员函数的重要性,并强调了静态对象的生命周期和初始化顺序。
摘要由CSDN通过智能技术生成

前言

大家好,我是雨墨,我深知好记性不如烂笔头的道理,所以在阅读的时候都尽量写读书笔记,方便日后复习,当然笔记并不能代替书籍上的内容。希望我的笔记也能帮助到大家,如果我的笔记有什么问题,欢迎大家给小老弟纠错~

条款一总结

视 C++ 为 C 、 面向对象、template、STL 的联邦

条款二总结

宏定义的坏处:

  • 一方面以 #define example 17举例
    • 编辑器调试的时候,很有可能会造成错误信息是17,然后让你不知所措,这是什么?从哪来的?。
    • 预处理器可能盲目地将example替换成17,导致目标码出现多份17
    • 无法利用宏创建一个 class 专属常量,也不提供任何封装性,因为宏不重视作用域。
  • 另一方面,宏看起来像函数时,并不会有额外的开销,因为宏替换发生在编译阶段之前,属于文本插入替换,但是必须为宏中的每个实参加上小括号,但即使加上了小括号,这样的宏也可能会遭遇不可思议的事情。所以最好使用 inline func 代替宏。
    • 宏替换发生在编译阶段之前,属于文本插入替换。
    • 宏不检查类型。
    • 宏定义的数据没有分配内存空间,只是插入替换掉。

const 为什么比宏好:

  • 上述例子改用 const 绝不会出现目标码为多个的情况,const 在程序运行时只会进行一次备份,且可以进行常量折叠,能将复杂的表达式计算出结果放入常量表中。
  • const常量有数据类型,编译器可以对其进行类型安全检查。
  • const定义的变量只是值不能改变,但要分配内存空间。

条款三总结

  • 顶层 const 和底层 const 的区别

  • 如何把迭代器声明指针为 const 一样

    vector<int> vec;
    const vector<int>::iterator iter = vec.begin();	// T* const
    *iter = 10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值