当前位置: 首页 > news >正文

《Effective C++》(1,2)

条款01:视C++为一个语言联邦

Q. C++联邦由哪些次语言构成?

C:基础语法

面向对象:类、封装、继承、多态、虚函数等

模板:泛型编程和模板元编程(TMP)

STL:标准模板库,包含容器、迭代器、算法和函数对象的设计模式

Q. 为什么要视为语言联邦?

为了不同的子语言使用不同的编程习惯。

条款02:尽量以 constenuminline 替换 #define

备注:C11 之后 constexpr 更加强化了这一思想

Q. 为什么不建议在 C++ 中使用 #define 定义常量?

#define不做类型检查,宏展开可能导致难以发现的错误。而constenuminline 是类型安全的。

预处理后,代码中所有 宏名 都变成了 值 ,符号表没有宏名,调试器只会看到常量值,看不到宏名,调试时遇到报错只看到值很难定位。

Q. 推荐做法

  • enum是编译期常量不占内存编译期常量在编译阶段就已知具体数值,编译器会把它直接写到指令中(代码段),不用再存内存变量; 而运行期常量,必须在运行时算出来并存到数据段)
  • 宏函数应全部替换为 inlineconstexpr 函数。
  • 常量应首选 constexpr(支持编译期计算)或 inline constexpr(跨文件共享)
  • 宏定义的最佳实践是只在条件编译、平台特定代码中用宏(如 #ifdef _WIN32

 

 

http://www.aitangshan.cn/news/227.html

相关文章:

  • 数组
  • CSP-S模拟赛11 总结
  • CSP-S模拟赛12 总结
  • 旋转表达:blender下骨骼重映射的公式推导 bone animation retarget
  • 进度
  • 一名OIER的开始
  • springboot监听redisKey过期 - br
  • 你好我好一切都好 - Karry
  • 数据库操作例题
  • 02010901 表达式和运算符
  • 浏览器面试题及详细答案 88道(01-11) - 详解
  • WBLT学习笔记
  • 敏宝
  • 图论
  • 【自学嵌入式:stm32单片机】旋转编码器记次
  • 乌班图静态网址动态网址
  • 用户以及赋权还有备份数据库
  • 立个Flag,重新开始使用cnblog - by
  • 做题日志2025.8
  • 数据库
  • 02010803 类和继承03-静态类、扩展方法、命名约定
  • 我设计的IP地址(3)
  • base44
  • 2025.8.11总结 - A
  • ftp服务详解
  • 八数码(bfs)
  • 我真的绷不住了
  • 欧拉回路
  • 8月11号
  • Orleans框架