[置顶] 使用const定义常量,inline定义小型函数
2016-01-22 11:28
417 查看
使用 const 而不是 #define 来定义常量
C使用预处理器来创建常量的符号名称:
而C++最好在变量申明使用限定符 const:
使用const的方法有很多优越性。首先,显示指定类型。使用#define时,必须在数字后面加各种后缀来指出除 char、int 或 double 之外的类型。例如,使用100L来表明 long 类型,使用3.14F 来表示 float 类型,更重要的是 const 方法可以很方便地用于符合类型,如下例所示:
使用 inline 而不是 #define 来定义小型函数
在创建类似于内联函数的东西时,传统的 C 语言方式是使用一个 #define 宏定义:
这将导致文本置换,将 x 替换为 Cube() 的参数:
由于预处理器使用文本置换,而不是真正地传递参数,因此,使用这种宏可能导致意外的、错误的结果。要避免这种错误,可以在宏中使用大量的圆括号来确保正确的运行顺序:
但即使是这样做,也无法处理诸如 z++ 等值的情况。
C++ 方法是使用关键字 inline 来标识内联函数,这种方法更可靠,因为他采用的是真正的参数传递。
C使用预处理器来创建常量的符号名称:
#define MAX_LENGTH 100
而C++最好在变量申明使用限定符 const:
const int MAX_LENGTH = 100;
使用const的方法有很多优越性。首先,显示指定类型。使用#define时,必须在数字后面加各种后缀来指出除 char、int 或 double 之外的类型。例如,使用100L来表明 long 类型,使用3.14F 来表示 float 类型,更重要的是 const 方法可以很方便地用于符合类型,如下例所示:
const int base_vals[5] = {1000,2000,3500,6000,10000}; const string ans[3] = {"yes","no","maybe"};
使用 inline 而不是 #define 来定义小型函数
在创建类似于内联函数的东西时,传统的 C 语言方式是使用一个 #define 宏定义:
#define Cube(x) x*x*x
这将导致文本置换,将 x 替换为 Cube() 的参数:
y = Cube(x); y = Cube(x + z++);
由于预处理器使用文本置换,而不是真正地传递参数,因此,使用这种宏可能导致意外的、错误的结果。要避免这种错误,可以在宏中使用大量的圆括号来确保正确的运行顺序:
#define Cube(x) ((x)*(x)*(x))
但即使是这样做,也无法处理诸如 z++ 等值的情况。
C++ 方法是使用关键字 inline 来标识内联函数,这种方法更可靠,因为他采用的是真正的参数传递。
相关文章推荐
- 解决mysql error: Table “mysql”.“innodb_table_stats” not found
- 例子说明tell, seek, truncate基本用法
- android TV-Building TV Channels,Developing a TV Input Service
- 字符编码总结
- springMVC两种方式实现多文件上传及效率比较
- erlang 脏调度器支持
- cms系统资源路径引入
- C++之路进阶——AC自动机(单词)
- Hadoop分布式文件系统——LZO
- 【rabbitmq】 com.rabbitmq.client.AlreadyClosedException: channel is already closed due to channel erro
- CentOS7部署开源跳板机(堡垒机)Jumpserver
- Xamarin.Forms教程开发Xamarin.Forms应用程序需要的工具
- 两种php实现图片上传的方法
- ios 移动端架构浅析
- Android APP 增量更新demo
- ASP.NET Core 1.0基础之静态文件处理
- 连接Oracle RAC 的tnsname.ora设置
- Java移位
- C++Primer第五版 12.1.6节练习
- leetcode69---Sqrt(x)(求x的平方根)