条款1:尽量用const和inline 而不用#define (第一章 从C转向C++)
来源:互联网 发布:2017淘宝上传宝贝视频 编辑:程序博客网 时间:2024/05/16 06:24
本条款最好称为:“尽量用编译器而不用预处理”,因为#define 经常被认为好像不是语言本省的一部分。这是问题之一。
#define ASPECT_RATIO 1.653 编译器会永远看不到ASPECT_RATIO这个符号名,因为再源码进入编译器之前,它会被预处理程序去掉,于是ASPECT_RATIO不会加入到符号列表中。
解决这个问题的方案很简单:不用预处理宏,定义一个变量:
const double ASPECT_RATIO = 1.653;
此方法有两个特殊情况要注意。
1.定义指针常量时会有点不同。
如定义一个基于char*的字符串常量,要写成如下:
const char* const authorName = "Scott Meyers";
2.定义某个类(class)的常量一般也很方便,只有一点点不同。首先要使它成为类的成员;为了保证常量最多只有一份拷贝,还要把它定义为静态成员:
class GamePlayer
{
private:
static const int NUM_TURNS = 5;
int scores[NUM_TURNS];
};
如果没有加static,那么编译器会提醒的。
在G++编译器下:报错为:error: ISO C++ forbids initialization of member ‘NUM_TURNS’
error: making ‘NUM_TURNS’ static
宏定义:
#define max(a,b) ((a) > (b) ? (a) :(b))
如果碰到下面这样的情况,会有奇怪的事发生
int a = 5 , b =0 ;
max(++a, b); //a的值增加了2次
max(++a, b+10); //a 的值只增加了1次
解决的方案就使用定义函数
template<class T>
inline const T & max (const T& a, const T& b)
{ return a > b? a: b;}
max是C++标准库的一部分。- 条款1:尽量用const和inline 而不用#define (第一章 从C转向C++)
- 从C转向C++:条款1:尽量用const和inline而不用#define
- 从C转向C++ ( 尽量用const和inline而不用#define )
- Effective C++:条款1:尽量用const和inline而不用#define
- 条款1:尽量用const和inline而不用#define
- 条款1:尽量用const和inline而不用#define
- 条款1:尽量用const和inline而不用#define
- 条款1:尽量用const和inline而不用#define
- 条款1:尽量用const和inline而不用#define
- 条款1:尽量用const和inline而不用#define
- 条款1:尽量用const和inline而不用#define
- Effective C++ 条款1: 尽量用const和inline而不用#define (连载)
- 从C转向C++:条款2:尽量用而不用
- Effective C++学习笔记:条款1:尽量用const和inline而不用#define
- Effective C++ 条款1:尽量用const和inline而不用#define
- effective C++ 条款 1:尽量用const和inline而不用#define
- 条款1:尽量用const和inline而不用#define [effective C++ 学习笔记]
- 9.c++-尽量用const和inline而不用#define,类静态成员变量和函数
- The literal XXXXXXXXXX of type int is out of range 处理办法
- cookie与session区别
- uva 301 Transportation 铁路公司的阳谋 纯dfs暴力
- 安装apk
- 讲义:第五项修炼(学习型组织的艺术与实践)
- 条款1:尽量用const和inline 而不用#define (第一章 从C转向C++)
- servlet/filter/listener/interceptor区别与联系
- 条款2:尽量用<iostream>而不用<stdio.h>
- DragonBones快速入门指南1
- TechNet Magazine VC++ 示例
- php mysql创建临时表
- POJ 1065 Wooden Sticks
- DragonBones快速入门指南2
- 条款3:尽量用new和delete而不用malloc和free