static, const 与 extern
1 scope
h1.cpp
int val = 10;
const int kval = 11;
static int sval = 12;
main.cpp
extern int val;
cout << val << endl; // Correct
extern int kval;
cout << val << endl; // Wrong
extern const int kval;
cout << val << endl; //Wrong
const 默认是局部变量, 在另一个文件中引入const 需要在源文件中加入关键字 extern 修饰
另外, extern 不占空间
sval 是无论如何都不能 main.cpp 中出现, 这就是 static 的局部性特征
2. static 定义式
void fun(int i) {
static int value = i++;
cout << value << endl;
}
fun(0) -> 0
fun(1) -> 0
fun(2)-> 0
3. const char str3[] = "abc";
const char str4[] = "abc";
const char* str5 = "abc";
const char* str6 = "abc";
cout << boolalpha << (str3 == str4) << endl;
cout << boolalpha << (str5 == str6) << endl;
返回 false true
str3, str4 两个字符数组都存在栈空间, 但两者地址值并不相等. 而 str5 和 str6 并非字符数组二是字符指针, 并不分配存储区, 其后 "abc" 以常量的形式存于常量区, 而他们自己仅是指向该区首地址的指针, 所以相等. &str5 和 &str6 是指指针自己的地址, 并不相等.