const 和extern const的关系
时间: 2024-10-23 19:06:14 浏览: 22
extern_volatile等修饰符的用法
在C++中,`const`和`extern const`是两个关键字,它们都用于修饰变量,但作用范围和含义略有不同。
1. `const`: 当前作用域内的常量
- 当您在声明或定义一个变量时加上`const`关键字,表示该变量的值不可改变,一旦初始化就不能再修改。例如:
```cpp
int a = 5; // a是一个const整型变量,其值为5
```
- 注意,`const`只限制了变量本身不会被修改,但对于指针指向的内容(如果`const`是对象的一部分),仍可以修改。
2. `extern const`: 声明外部常量
- 如果在一个源文件中将`const`变量声明为`extern const`,那么这个变量实际上是另一个文件中的静态全局常量。这样可以在不包含实际定义的情况下引用它。例如:
```cpp
extern const double PI; // 在头文件中声明PI为一个外部常量
// 在其他源文件中定义:
const double PI = 3.14159;
```
- 这种情况下,即使变量没有初始化,编译器也会为其分配内存,且它的值在整个程序中只有一个,不会因为每个文件加载一次而创建多个副本。
总结一下两者的关系:
- 如果只是局部变量或成员变量用`const`,则它的值在整个作用域内是固定的。
- 如果要让一个常量成为全局可用且仅定义一次的共享值,就需要在头文件中用`extern const`声明,在某个源文件中提供完整的定义。
阅读全文