C++编程技巧:static对象初始化与const替代宏
需积分: 0 56 浏览量
更新于2024-07-01
收藏 1.28MB PDF 举报
在Effective C++笔记1中,作者强调了C++语言的多元性和使用不同特性来提升代码质量。首先,C++并非单一语言,而是由C、面向对象编程、模板C++(包括泛型编程和模板元编程)以及STL(标准模板库)四个部分组成,这四个子语言共同构成了C++的强大功能。
规则一指出,应将C++视为一个语言联盟,避免过度依赖预处理器。传统的`#define`在C++中存在诸多缺点,例如:
1. 宏定义如`#define ASPECT_RATIO 1.653`会导致名称在编译前消失,影响调试,且可能导致代码重复和效率低下。替代方法是使用`const`、`enum`和`inline`,它们可以在编译时处理常量,避免了这些问题。
2. `const`的正确使用至关重要:对于常量指针,推荐使用`const`指针;类内的常量若要控制作用域和拷贝,应声明为`static`,即使无内部定义,也可以在类外使用,但需要确保地址操作时提供定义。
3. 特殊情况下,如果不能在编译期为类内的静态整型常量赋初值,可以利用`enum hack`技巧,但这会牺牲引用和指针的可用性,更适合模板元编程。
4. `#define`函数如`CALL_WITH_MAX`存在参数匹配问题和潜在的副作用,比如`a`的累加。这些问题可以通过内联函数模板来避免,提高代码的可读性和一致性。
总结来说,Effective C++建议在C++中:
- 用`const`、`enum`和`inline`替代`#define`处理常量和简单的函数式代码。
- 保持对`const`指针和类内静态常量的正确使用。
- 使用内联函数模板来替换具有副作用的宏定义,以减少代码错误和提高性能。
通过遵循这些原则,开发人员可以编写更加高效、可维护的C++代码,充分利用C++语言的灵活性和强大功能。
104 浏览量
192 浏览量
373 浏览量
2018-05-22 上传
半清斋
- 粉丝: 968
- 资源: 322