编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高
(4)可以保护被它修饰的东西
防止意外的修改,增强程序的健壮性。
void f(const int i) { i=10;//error! } //如果在函数体内修改了i,编译器就会报错
(5)为函数重载提供了一个参考
class A { ...... void f(int i) {......} //一个函数 void f(int i) const {......} //上一个函数的重载 ...... };
(6)定义域不同
void f1 () { #define N 12 const int n 12; } void f2 () { cout<<N <<endl; //正确,N已经定义过,不受定义域限制 cout<<n <<endl; //错误,n定义域只在f1函数中。若想在f2中使用需定义为全局的 }
(7)做函数参数
宏定义不能作为参数传递给函数;const常量可以在函数的参数列表中出现。
9.const_cast
const_cast运算符用来修改类型的const或volatile属性。
(1)常量指针被转化成非常量的指针,并且仍然指向原来的对象;
(2)常量引用被转换成非常量的引用,并且仍然指向原来的对象。
void func() { const int a = 10; int* p = const_cast<int*> (&a); *p = 20; std::cout<<*p; // 20 std::cout<<a; // 10 }
注:C++中使用const 常量而不使用宏常量,即const 常量完全取代宏常量。
以上所述是小编给大家介绍的C/C++中const关键字的用法及其与宏常量的比较,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对<计算机技术网(www.ctvol.com)!!>网站的支持!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/488321.html