C++学习-存储的持续性与作用域
来源:互联网 发布:java web的区别 编辑:程序博客网 时间:2024/06/07 01:52
- 自动存储
- 函数存储
- 静态存储
- 类作用域
自动存储
- 在默认情况下,在函数中声明的函数参数和变量存储类型为auto,作用域为局部。
- 如果在代码块中定义了变量,则该变量的存在时间和作用域被为代码块
- 在函数体内部代码块中声明与代码块外部名称相同变量时,程序执行到代码块内部时将该变量解释为局部代码块变量,新的定义隐藏了旧的定义。程序离开代码块时,原来的定义重新可见
- 全局声明的auto变量具有外部链接性,两个源文件中不能声明同名称的全局auto变量
使用extern关键字引用同名外部变量
//1.cppint t = 5;int main(){ ...}//2.cppextren int t;//t = 5
- 注意: extern int t = 1 等效于声明赋值语句
- 实际上,使用extern链接的外部变量是与原变量相同地址的一样的变量
函数存储
- 函数的默认为静态存储,具有外部链接性。static可将函数的链接性设置为内部,在其他源文件中可声明并定义同名函数
- 在定义了静态函数的文件中,静态函数的定义将覆盖全局函数的定义。即使在文件外部有同名函数仍使用静态版本。
- 内联函数不受该规则限制,在头文件中声明内联函数,包含头文件的每个文件都会具有内联函数的定义。
静态存储
- 使用static关键字声明的变量为静态存储变量
- 全局声明的静态变量不具有外部连接性,若其他源文件有同名自动变量,在使用时静态变量的定义将覆盖自动变量
- 静态变量的作用域与自动变量相同,但在程序运行时一直存在。在函数体内声明的静态变量声明赋值语句只会执行一次
- 使用作用域解析运算符 :: 放在变量前面时,将使用变量的全局版本
类作用域
- 在类中定义的函数和变量作用域为整个类。因此可以在不同类中使用相同的类成员名
- 类作用域意味着不能从外部直接访问类成员,必须通过对象访问
- 在类外定义类成员函数时需要加上作用解析运算符(如void Ch::test(int b))
- 访问类指针成员时须使用间接成员运算符(->)
在类声明中不能直接定义整型常量,在类定义未声明时并不能为常量开辟储存空间。解决方法为
class a{public: enum{yellow = 10};...}
这种方式不会创建类成员,类中的对象不包含枚举。yellow是符号名称,在类中,编译器会用12替代yellow。
使用关键字static const
class a{public:static const yellow = 12;...}
这种方式会创建静态类成员,但其存储在静态存储区中而非对象中
阅读全文
0 0
- C++学习-存储的持续性与作用域
- 【C++】学习笔记四十五——存储持续性、作用域、链接性
- C++变量的存储持续性、作用域和链接性
- 变量的存储持续性,作用域和链接性
- 存储持续性、作用域和链接性
- 存储持续性、作用域和链接性
- 存储持续性,作用域和链接性
- 存储持续性、作用域和链接性
- 存储持续性、作用域和链接性
- 存储持续性、作用域和链接性
- C++Primer Plus 第九章-存储持续性、作用域和链接性
- C++的存储持续性(自动、静态、动态),作用域,链接性
- 内存模型和名称空间,作用域,链接性,定位运算符,存储的持续性,mutable
- C++之浅谈存储持续性、作用域和链接性
- (一一一)存储持续性、作用域和链接性
- c++存储持续性、作用域和链接性
- C++内存模型与名称空间(存储持续性、作用域、链接性、动态内存分配、命名空间)
- C++中参数的持续性,作用域和连接性。
- 微服务:Spring Boot第三篇——数据访问Spring Data JPA
- BZOJ 2882 浅谈最小表示法后缀数组求解+线性求解
- CC2630 7x7 更改为5X5
- LeetCode 563. Binary Tree Tilt
- ADO数据库编程
- C++学习-存储的持续性与作用域
- #ifndef/#define/#endif详解
- python爬取页面常用的正则表达
- HDU1091-A+B for Input-Output Practice (III)
- 自定义表情面板
- codeforces 686D(树的重心)
- 648. Replace Words
- 如何选择机器学习算法的简单线路图
- rownum用法详解