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 是指指针自己的地址, 并不相等.

原文地址:https://www.cnblogs.com/zhouzhuo/p/3666061.html