作用域
static 和 const 的作用域都是当前模块(当前cpp文件),所以不同的模块可以定义同名的static 和 const 变量
在上面的例子中,我们先了解一些基础知识:
static int x = 1;
const int x = 1;
static const int x = 1;
上面的三种声明都涉及到变量 x,但它们在作用域和可修改性方面有不同的区别。
static int x = 1;
这声明了一个静态整数变量 x,其作用域限定在当前文件中。它可以被修改,因为它没有被声明为常量。
const int x = 1;
这声明了一个整数常量 x,其作用域通常也限定在当前文件中(如果是在文件的顶层声明的话),但它不能被修改。试图修改这个变量将导致编译错误。
static const int x = 1;
这声明了一个静态整数常量 x,其作用域同样限定在当前文件中,同时也不能被修改。这是常量的一种形式,因此也不可修改。
总结:第一个声明创建一个可修改的静态整数变量,第二个声明创建一个不可修改的整数常量,第三个声明创建一个不可修改的静态整数常量。这些声明的区别主要在于作用域和可修改性。
在图片的代码中,2.cpp 中即使写了 extern const int a ; (这句话本身没有问题),但是当真正要用到 a 的时候会报错,因为 1.cpp 中 const int a 的作用域是本模块,故 2.cpp 无法访问到
变量定义