C++中应该使用const,enum,inline而非#define
来源:互联网 发布:淘宝分类没法横向布置 编辑:程序博客网 时间:2024/06/05 21:14
1、使用#define target source,会引发预处理器的处理而不是编译器的处理,预处理器只会将程序中出现target 的部分替换为source,不会做语法检查。
当如下情况时:
#define CALL_WITH_MAX(a,b) f((a)>(b)?(a):(b))
int a = 3,b=2;
CALL_WITH_MAX(++a,b); //这样会导致a前加两次,返回的值就不是CALL_WITH_MAX(a,b)中的a,而是++a,这违背了程序的意图
CALL_WITH_MAX(++a,b+3);//这种情况正常
而我们如果使用内联函数,就不会出现这种情况了
template<typename T>
inline void callWithMax(const T&a,const T&b)
{
return (a>b?a:b);
}
2、使用#define预定义一个常量,当程序出现错误时,会给调试带来不便
#define MAX_NUM 100
如果程序出现关于MAX_NUM引起的编译错误,错误信息会指向数值100,而非预定义字符MAX_NUM,如果#define所在头文件不是自己写的,这就会给寻找100
所代表的含义带来不便。
C++中定义常量最好使用const
使用const定义指针的时候需要注意
1)、const char* const sName = "Join";
应该尽量使用const string sName("Join");
2)、关于const T*p 和T *const p
没有必要区分哪个是常量指针,哪个是指针常量,不过是文字游戏,自己明白什么意思就行,当const位于*左边时,说明p指向的内容为常量,不可修改
当const位于*右边时,说明指针p为常量,只能指向初始化时指向的内存地址,不可给p重新赋值,但其指向的空间的内容可以修改。
3)、当const出现在一个类中时
为保证const变量只被赋值一次,应声明为static(保证在整个类中都是恒定常量)
class Test
{
public:
Test(const int val):a(val){}
private:
const int a; //只能在构造函数的初始化列表初始化
static int b;//在类的实现文件中初始化
static const int c;//同const static int c
}
int Test::b = 0;
const int Test::c = 0;
===============================================================================================================
1、关于enum
当一个成员函数需要一个常量时,enum是最好的选择
class Test
{
public:
Test();
enum{length = 5};
int getEnum()
{
return length;
}
private:
int nums[length];
}
//不能用指针或者引用指向一个enum
int *p = t.getEnum(); //error
int &r = t.getEnum(); //error
- C++中应该使用const,enum,inline而非#define
- 【C++】#define vs const 、enum & inline
- 尽量使用const、enum、inline代替#define
- 使用const,enum,inline template<>替代#define
- const,enum,inline替换#define
- static const inline #define enum
- [C++]尽量以const,enum,inline替换#define
- 《Effective C++》尽量以const,enum,inline,替换#define
- effective C++:尽量以const、enum、inline替换#define
- 【C++】尽量以const,enum,inline 替换 #define
- 尽量使用const、enum、inline,避免使用#define
- 转帖 尽量使用const、enum、inline,避免使用#define
- 尽量使用const、enum、inline,避免使用 #define
- 条款02:尽可能使用const, enum, inline替代define
- 尽量不要使用#define,而是用const、enum、inline替换。
- 尽量不要使用#define,而是用const、enum、inline替换。
- 使用enum、const、inline替换#define的原因
- 尽量不要使用#define,而是用const、enum、inline替换。
- 子窗体在父窗体居中
- mac 下 在cocos2d-x3.0 创建 Android 项目
- csdn各种积分规则
- c++时间类
- Servlet 3.0 新特性详解(servlet是单实例多线程的,线程池数量有限)
- C++中应该使用const,enum,inline而非#define
- 冒泡,选择,快速排序
- iOS之同步请求、异步请求、GET请求、POST请求
- android Handler 和Message消息机制
- 我们的感情就像他送给我的指甲油
- MEMO:Ubuntu 13.04 安装Eclipse
- 一个字面常量
- 面向对象基础指数(7)抽象类 接口
- c语言指针的应用