『7x24小时有问必答』

C/C++中const、inline和#define的比较

1. const (常量)

比喻:就像工地上的永久标识牌,一旦安装就不能更改
特点
定义真正的常量,有类型检查
在编译阶段处理
作用域遵循变量作用域规则
C++中可修饰成员函数,表示不修改对象状态
C语言示例
cCopy Code

constint  MAX_SIZE =  100;   // 定义整型常量

C++示例
cppCopy Code

classCircle  {

private:

constdouble  PI =  3.14159;   // 类内常量

public:

doublearea()const{         // const成员函数

return  PI * radius * radius;

      }

};

2. inline (内联)

比喻:就像工地上的临时工作站,把常用工具放在手边减少走动时间
特点
向编译器建议将函数代码直接插入调用处
避免函数调用的开销
在编译阶段处理
适用于短小频繁调用的函数
C++示例
cppCopy Code

inlineintmax(int  a,  int  b){

return  a > b ? a : b;

}

3. #define (宏定义)

比喻:就像工地上的临时标记,在施工前就被替换掉
特点
预处理指令,简单的文本替换
无类型检查
全局作用域
可能导致难以发现的错误
C/C++示例
cCopy Code

#define  PI 3.14159

#define  MAX(a,b) ((a) > (b) ? (a) : (b))

主要区别

特性
const
inline
#define
处理阶段
编译时
编译时
预处理时
类型检查
作用域
遵循作用域规则
遵循作用域规则
全局
调试支持
内存占用
占用内存
可能增加代码大小
不占用内存
适用场景
定义常量
短小函数
简单替换

现代C++最佳实践

优先使用const代替#define定义常量
对于简单函数,优先使用inline而非宏函数
避免使用#define创建宏函数,容易引发错误
C++11后可用constexpr替代部分const场景
示例对比
cppCopy Code

// 不好的做法

#define  SQUARE(x) ((x)*(x))

// 好的做法

inlineintsquare(int  x){  return  x * x; }

// 或C++11后

constexprintsquare(int  x){  return  x * x; }

在C++中,const和inline提供了更安全、更可维护的替代方案,应优先于#define使用。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码