在C++中定义常量的两种方法的比较
来源:互联网 发布:java 标记方法过时 编辑:程序博客网 时间:2024/05/18 16:14
转载自:http://www.cnblogs.com/huhu0013/archive/2010/09/13/1824987.html
常量是定以后,在程序运行中不能被改变的标识符。C++中定义常量可以用#define 、const 这两种方法。例如:
#define PRICE 10 //定义单价常量10
const int PRICE = 10; //定义单价常量10
其实用常量是有它的理由的,下面我们来看下面两段程序对比
代码:
#include <iostream>using namespace std;#define PI 3.14159//const double PI = 3.14159;int main(int argc, char* argv[]){ double square = 0,volume =0, radius=0; cout<<"请输入半径长度"<<endl; cin>>radius; square = 3.14159 * radius * radius; cout<<"半径长度为:"<<radius<<"的圆面积是:"<<square<<endl; volume = 4 * 3.14159 * radius * radius * radius /3; cout<<"半径长度为:"<<radius<<"的球体积是:"<<volume<<endl;}
#include <iostream>using namespace std;#define PI 3.14159//const double PI = 3.14159;int main(int argc, char* argv[]){ double square = 0,volume =0, radius=0; cout<<"请输入半径长度"<<endl; cin>>radius; square = PI * radius * radius; cout<<"半径长度为:"<<radius<<"的圆面积是:"<<square<<endl; volume = 4 * PI * radius * radius * radius /3; cout<<"半径长度为:"<<radius<<"的球体积是:"<<volume<<endl;}
显然如果我还要求球、圆柱体的面积等,用常量的好处就显而易见,用常量的有下面一些好处:
1:增强程序的可读性。用一个有意义的常量代理一串无意义的字符串,显然很多时候程序员忘了或是不理解这一串字符串代表什么意义。
2:如果很多地方用到像PI(3.14159)这样的常量,难保输入错误,尤其复杂的很长的字符串时,而用常量则能一改而全部改变、减少出错的几率。
其中#define是定义宏变量,它其实是在编译之前,由预处理指令把代码里面的宏变量用指定的字符串替换,它不做语法检查,而constant 则是定义含有变量类型的常量。一般说来推荐使用constant定义常量,它在编译时会做语法检查。Effective c++ 的条款1中:“尽量用编译器而不用预处理”,因为#define经常被认为好象不是语言本身的一部分。而且有时候用宏,会出现意想不到的输出结果。
define 与 const 的比较
(1) const 常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误(边际效应) 。
(2) 有些集成化的调试工具可以对 const 常量进行调试, 但是不能对宏常量进行调试。
阅读全文
1 0
- 在C++中定义常量的两种方法的比较
- 在C++中定义常量的两种方法的比较
- 在C++中定义常量的两种方法的比较
- C#:定义常量的两种方法
- 《Effective C#》Item 2:定义常量的两种方法
- 《Effective C#》Item 2:定义常量的两种方法
- C语言中定义常量的两种方式
- C#中定义常量的两种方法
- 定义常量的两种方法
- C#定义常量的两种方法
- C# 定义常量的两种方法
- 定义常量的两种方法
- 在 C# 中定义常量的方法
- 在类中定义常量的方法
- 转:《Effective C#》Item 2:定义常量的两种方法
- 【转贴】C#箴言:定义常量的两种方法
- C#箴言:定义常量的两种方法
- C#箴言:定义常量的两种方法
- Can't connect to MySQL server on 'localhost' (10061)
- 回归- 决策树
- centos安装bison
- if,while的一点点知识 酒馆浪人的博客
- JavaScript实战演练1.2
- 在C++中定义常量的两种方法的比较
- Linux ftp账号设置
- HDFS YARN zookeeper HBASE HIVE HIVE hwi的启动
- C语言小结--数组
- 磁共振扫描安全性
- jvm系列(一):java类的加载机制
- 几何模板
- poj1113 Wall 凸包
- NYOJ 6-喷水装置(一)(简单贪心)