在深入探讨C++中的`const`与`static`关键字及其链接属性之前,我们先来简要回顾一下这两个关键字的基本概念。 ### `const`关键字 `const`关键字在C++中用于声明常量或指定对象的某些部分是不可修改的。这可以应用于变量、函数参数、成员函数等,提供了一种保护数据不被意外修改的机制,同时也有助于编译器进行优化。 ### `static`关键字 `static`关键字有多种用途。在局部变量中使用时,它可以使变量在整个程序运行期间保持其值,即使函数调用结束也不会丢失;在全局变量中使用时,它限制了变量的作用域仅限于当前文件;在类的成员变量中使用时,则表示该成员变量为静态存储,被所有对象共享一份。 ### 链接属性:内部链接与外部链接 链接属性决定了一个符号(如变量、函数)是否可以在多个编译单元之间共享。内部链接(internal linkage)意味着符号只能在其定义的编译单元内访问,而外部链接(external linkage)则允许符号在不同编译单元间共享。 ### `const`与`static`的结合使用及链接属性 #### `const`与内部链接 当`const`与`static`结合使用在局部变量前时,表示创建了一个只读且生命周期贯穿整个程序执行过程的变量。这种变量通常具有内部链接,即只能在定义它的函数内部访问。例如: ```cpp void someFunction() { static const int myConst = 10; // 具有内部链接的const变量 } ``` #### `const`与外部链接 如果`const`变量没有使用`static`关键字,那么它将具有外部链接,这意味着它可以被其他编译单元所访问。但是,为了防止多个编译单元重复定义同一`const`变量,通常会使用`extern`关键字在其他文件中声明这个变量,而在一个文件中定义它。例如: ```cpp // 在头文件中 extern const int myConst; // 在实现文件中 const int myConst = 10; // 定义并初始化 ``` 在另一个文件中使用: ```cpp #include "myheader.h" void useMyConst() { std::cout << myConst << std::endl; } ``` ### `const`与`static`在类中的应用 在类的上下文中,`static`和`const`关键字经常一起使用来定义静态常量成员。这些成员被所有对象共享,并且不允许修改。它们必须在类体外初始化,并且可以通过类名直接访问,无需实例化对象。例如: ```cpp class MyClass { public: static const int MAX_VALUE; }; // 在类体外初始化 const int MyClass::MAX_VALUE = 100; ``` 这样定义的静态常量成员具有外部链接,除非使用`static`关键字进一步限定为内部链接。这对于避免不必要的内存分配和提高代码效率非常有用。 ### 总结 `const`和`static`关键字在C++编程中扮演着关键角色,它们不仅有助于确保数据安全,还能优化代码性能。正确理解和使用这些关键字,以及它们与链接属性的关系,对于编写高质量、可维护的C++代码至关重要。无论是处理局部变量还是类成员,了解它们的链接属性都是必不可少的。通过上述讨论,我们可以看到,合理运用`const`、`static`以及它们的链接属性,能够显著提升代码的可靠性和效率。
我整理了下思路,发现当想向他说清楚这个问题时,我发现自己对const和#define中有些问题还是很模糊,我想这可能就是某位高手说的:“当你可以向别人清楚的
解释某个问题时,你才算真正懂了这个问题”。于是乎,赶紧学习了下,理理思路,记下。
1、c语言中:
1 const int i=10;
2 int array[i] ;
这个i不能说是常量而是一个不可改变的变量,它的不可改变是由编译器确定的,因此将 i 作为数组的长度;会出错,数组的长度
必须是一个编译期常量(下面解释)。在C++中这样定义却是可以通过的,在C++中有一个常量折叠概念。
2、编译期常量和运行期常量
两者都是常量,它们的区别, 可以用是否具备内存空间来区分
编译期常量,
比如, #define MAX 128
这个 MAX 就是编译期常量, 没有对应的内存空间,
在编译时候, 所有的 MAX 都被 128 这个值代替
运行期常量,
比如 const int x=128;
就是一个运行期常量, 分配内存空间,
但是其值不允许改变
还有 const int y = ram();//ram()是一个获取随机数的函数,
- 粉丝: 1
- 资源: 4
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助