• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

c++中两种常量方法的比较

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

[c++]在C++中定义常量的两种方法的比较

 

常量是定以后,在程序运行中不能被改变的标识符。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 常量进行调试,  但是不能对宏常量进行调试。

常量是定以后,在程序运行中不能被改变的标识符。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 常量进行调试,  但是不能对宏常量进行调试。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
c++switch语句发布时间:2022-07-13
下一篇:
c#绑定checkboxlist数据库的值函数发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap