const与define 优缺点比较

常量:

用宏表示常数

假如我们要写一个有关圆的种种计算的程序,那么∏(3.14159)值会被濒繁用到。我们显然没有理由去改∏的值,所以应该将它当成一个常量对待,那么,我们是否就不得不一遍一遍地写3.14159这一长串的数呢?这就用到了宏。宏不仅可以用来代替常数值,还可以用来代替表达式,甚至是代码段。宏的语法为: 

#define 宏名称 宏值 

比如要代替前面说到的∏值,应为:#define PAI 3.14159注意,宏定义不是C或C++严格意义上的语句,所以其行末不用加分号结束。宏名称的取名规则和变量名一样,所以我们这里用PAI来表示∏,因为C、C++不能直接使用∏字符。有了上面的语句,我们在程序中凡是要用到3.14159的地方都可以使用PAI这个宏来取代。宏名称经常使用全部大写的字母。假设原来有一段代码:double zc = 2 * 3.14159 * R; //求圆周长,其中R是代表半径的变量double mj = 3.14159 * R * R; //求圆面积 

在定义了宏PAI以后,我们就可以这样使用:

#define PAI 3.14159 

double = 2 * PAI * R; //求圆周长,其中R是代表半径的变量

double = PAI * R * R; //求圆面积 

用宏来取代常数,好处是: 

1)让代码更简洁明了

当然,这有赖于你为宏取一个适当的名字。一般来说,宏的名字更要注重有明确直观的意义,有时宁可让它长点。

2)方便代码维护

就如前面说的3.14159。哪天你发现这个∏值精度不够,想改为3.1415926,那么你只修改一处宏,而不是修改代码中的所有宏。

原来的宏:

#define PAI 3.14159

修改后的宏:

#define PAI 3.1415926 

对宏的处理,在编译过程中称为“预处理”。也就是说在正式编译前,编译器必须先将代码出现的宏,用其相应的宏值替换,这个过程有点你我在文字处理软件中的查找替换。完成预处理后,所有原来的“PAI”都成了立即数3.1415926。所以在代码中使用宏表达常数,归根结底还是使用了立即数,并没有明确指定这个量的类型。这容易带来一些问题,所以C++使用另一更稳妥的方法来代替宏的这一功能。

const 数据类型 常量名 = 常量值;  

相比变量定义的格式,常量定义必须以 const 开始,另外,常量必须在定义的同时,完成赋值。  

const float PAI = 3.1415926; (注意分号) 

const 的作用就是指明这个量(PAI)是常量,而非变量。

常量必须一开始就指定一个值,然后,在以后的代码中,我们不允许改变PAI的值,比如: 

const float PAI = 3.14159;

double zc = 2 * PAI * R;

PAI = 3.1415926; //错误!,PAI不能再修改。

double mj = PAI * R * R;  

如果一个常量是整型,可以省略指出数据类型,如:

const k = 100;

相当于

const int k = 100;  

反过来说,如果不指定数据类型,则编译器将它当成整型。比如:

const k = 1.234;

虽然你想让k等于一个实型数,然而,最终k的值其实是1。因为编译器把它当成整型常量。

我们建议在定义变量时,明确指出类型,不管它是整型或其它类型。  

const int i = 100;

const double di = 100.0;

const 与#define

#define定义的其实是一个常数的名字,就是说你可以把这个名字等价于常数使用,在编译时会被编译器替换为该常数。之所以这么做,仅仅是为了提高可读性,但是安全性不能得到保证。
出于安全性的考虑,c++引入了const定义。当然这仅仅是const的功能之一。使用const,你可以定义一个不能修改其值的变量,也就是可以作为一个常量来使用了。当然,这个量与100,'a'等还是有区别的。区别就在于这个量有自己的内存地址,是被分配了空间的。
总的说来,#define 没有给名字分配空间,仅仅是给一个常数起了一个名字。而const定义了一个其值不能修改的变量,在内存中是有自己的地址的

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Python中,`const`并不是一个关键字,因此我们通常使用`defile`来实现常量。 `defile`的优点: 1. 可读性高:在代码中使用常量名称,可以使代码更加可读,易于理解。 2. 容易维护:如果程序中需要修改常量,只需要在`defile`语句中修改即可,而无需在所有引用该常量的地方进行修改。 3. 避免错误:使用常量可以避免在代码中硬编码数值,从而减少出错的可能性。 `defile`的缺点: 1. 命名空间污染:每个定义的常量都会占用一个命名空间,如果定义过多的常量,可能会导致命名空间污染,从而增加出错的可能性。 2. 可变性:虽然我们可以通过将常量定义为元组或其他不可变对象来防止修改常量的值,但是Python本身并没有提供强制保护常量的机制,因此仍然可以通过其他方式修改常量的值。 总之,使用`defile`定义常量是一种好习惯,可以提高代码的可读性和可维护性,但是在使用时需要注意命名空间污染和可变性等问题。 ### 回答2: const和define都是常用的关键字,它们在编程中具有不同的优点和缺点。 const关键字用于声明常量。它的优点是可以定义一个在程序中不能被修改的变量,可以提高代码的可读性和可维护性。通过使用const关键字,可以避免程序中意外修改常量的问题,保证程序的稳定性。另外,const关键字还可以提高代码的效率,因为编译器可以在编译时对const变量进行优化,减少不必要的计算过程。但是const关键字的缺点是,一旦常量被定义,它的值就无法再改变,可能会限制了一些特定的需求,导致不便。 define关键字用于定义预处理宏。它的优点是可以在程序中使用宏来代替某些常用的代码片段,提高代码的复用性。通过使用define关键字,可以简化程序的编写和维护,并且可以在不同的地方使用相同的宏定义,减少代码的冗余性。此外,define关键字还可以用于在编译时进行条件编译,实现不同平台或不同配置条件下的代码段选择。但是define关键字的缺点是,宏展开是在预处理阶段进行的,可能会导致代码的阅读和调试困难。另外,由于宏的替换是简单的文本替换,容易引发一些有关作用域和优先级的问题。 综上所述,const关键字适用于声明常量,提高代码的稳定性和效率;而define关键字适用于定义预处理宏,提高代码的复用性和灵活性。在实际编程中,应根据具体的需求和场景来选择使用哪个关键字。 ### 回答3: const和define都是用于定义常量的关键字,在编程中经常被使用。 const的优点: 1. const关键字用于定义常量,定义后的值不可更改,可以提高程序的可读性和稳定性。 2. const在编译期间就会进行值的替换,可以提高程序的执行效率。 3. const关键字可以防止意外的修改,在调试程序时可以提供更好的保护。 const的缺点: 1. const定义的常量在整个程序运行期间都是存在的,如果定义了大量的常量,会占用较多的内存空间。 2. const常量只能定义基本数据类型的值或者浅复制的对象,无法定义复杂对象,限制了其使用范围。 define的优点: 1. define可以定义任何形式的常量,包括字符串、复杂对象等。 2. define定义的常量是在预处理阶段进行替换的,可以减小程序的体积和运行时间。 define的缺点: 1. define在预处理阶段进行替换,可能导致一些错误在编译器阶段才能发现,增加了调试的难度。 2. define定义的常量是全局的,可能会与其他部分的代码冲突。 3. define定义的常量没有类型检查,可能导致错误的使用。 综上所述,const和define都有各自的优缺点,根据具体的使用场景和需求,选择合适的关键字来定义常量。一般情况下,建议使用const关键字来定义常量,以提高程序的可读性和稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值