本人做c++开发,谁能把 inline、staitc、const修饰函数、修饰成员变量、修饰局部变量讲明白呢
不同修饰符号、编译后、运行时,所在的内存区域,最好能Demo验证!
C++ inline、staitc、const三合一谁能讲通透
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
7条回答 默认 最新
- 社区专家-Monster-XH 2023-02-03 22:28关注
inline:
inline 是一个函数修饰符,是用来请求编译器在调用处展开该函数的代码,并不是生成一个函数调用的机器代码。这养,就可以提高程序的执行速度了,但是会增加了程序的代码数量。
static:
static 是一个修饰符,可以用于修饰函数、成员变量和局部变量。当 static 修饰一个函数时,它的生存期与整个程序相同,当且仅当在定义它的文件内才能看到。当 static 修饰成员变量时,它是该类的类成员,并且与整个类共享一个实例。当 static 修饰局部变量时,它的生存期与整个程序相同,但也是当且仅当在定义它的代码块内才可以看见。
stcon:
const 是一个修饰符,可以用于修饰函数、成员变量、局部变量和指针。当 const 修饰一个函数时,它声明该函数不会修改对象的状态。当 const 修饰成员变量时,它声明该成员变量是一个常量,不能在类的其他成员函数中被修改。当 const 修饰局部变量时,它声明该变量是一个常量,不能被修改。当 const 修饰指针时,它声明该指针指向的对象是一个常量,不能通过该指针修改指向的对象的值。
const 修饰指针时,在下面的代码中看到编译器生成的错误信息:#include <iostream> int main() { int x = 5; const int *ptr = &x; // ptr 是一个指向 int 常量的指针 // 下面的语句将导致编译错误 // *ptr = 10; std::cout << "x = " << x << std::endl; return 0; }
编译器下错误信息:
error: assignment of read-only location '*ptr'
说明不能通过该指针修改指向的对象的值。
代码验证 inline 函数:#include <iostream> inline int max(int a, int b) { return a > b ? a : b; } int main() { int a = 10, b = 20; std::cout << "max(" << a << ", " << b << ") = " << max(a, b) << std::endl; return 0; }
看到以下输出:
max(10, 20) = 20
说明函数 max() 正确地返回了两个整数中的最大值。
以下代码验证 static 变量:#include <iostream> void incrementStatic() { static int count = 0; // static 变量 ++count; std::cout << "count = " << count << std::endl; } int main() { for (int i = 0; i < 5; ++i) { incrementStatic(); } return 0; }
代码输出:
count = 1 count = 2 count = 3 count = 4 count = 5
说明 static 变量在函数被调用多次时仍然保留其值,而不是在每次调用时重新初始化。
赞
回复本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
- ¥20 怎么用dlib库的算法识别小麦病虫害
- ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
- ¥15 java写代码遇到问题,求帮助
- ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
- ¥15 有了解d3和topogram.js库的吗?有偿请教
- ¥100 任意维数的K均值聚类
- ¥15 stamps做sbas-insar,时序沉降图怎么画
- ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
- ¥15 关于#Java#的问题,如何解决?