C++ 各种全局常量的声明方式的优缺点

本文探讨了C++中全局常量的声明方式及其优缺点。const变量不应在头文件中声明,应在cpp文件中定义,以避免性能下降。编译器对const进行了优化,使其在某些情况下等同于#define常量,但提供了类型检查和命名空间。const在函数重载和编译效率方面优于#define。同时,enum作为const变量的一种形式,节省内存但类型限制使用不便。#define主要用来创建快捷语法或条件编译指令,其在C++中的角色不同于定义常量。
摘要由CSDN通过智能技术生成

(1) 一般用途的const变量,绝对不应该声明在头文件,定义在cpp里,尤其是基础类型(int之类)这个和inline函数是类似的,编译器能自动处理不同cpp中有同样const的问题;如果不使用const变量的地址,这个const变量最终会被完全优化掉,不占静态存储空间。而如果定义成extern,会导致编译器不得不为这个变量分配一个地址,并且在使用的时候强制地去从地址取得值,这会导致极大的性能下降。比如:


   
   
   
  1. const int a = 16;
  2. inline int sqr(x)
  3. {
  4. return a * a;
  5. }
  6. myFunc(sqr(a));

在这里,编译器可以把整个sqr(a)都优化掉,替换成一个立即数256。而如果a定义成了extern,这里就必须是读数值、乘法、传参数的过程了。
C++中编译器对于const变量做了充分的优化,它完全可以取代#define常量的一切功能。
比如:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值