【编程语法-C++】课堂总结21-24
静态关键字
编译单元: 1个cpp文件经过编译后产生的文件
所以在一个cpp文件中定义的静态关键字在链接的时候不会被外部的编译单元看见以及调用。
如果一个cpp文件需要另一个文件里定义的变量(注意是必须非静态的),可以使用extern关键词声明,然后linker就能链接。
一个良好的代码规范就是对于不需要链接到其他文件的函数/类/结构体/变量等等,尽量使用静态关键字。
另一个关键点就是,对于一个类,如果类里的变量存在静态关键字,那么类在实例化的时候,这个静态对象只会存在一个。所以如果在不同的实例里改变这个变量,那么最后所有实例中这个变量的值都会一样,都等于最后一次改变后的值,因为它们都指向同一个内存空间。
静态方法无法访问非静态变量,因为静态成员函数不属于类的方法。因为已经消掉了this指针,所以无法访问类的成员函数和变量。
struct Test() { int x, y; static void Print() { std::cout << x << y << std:endl; } }; Test t; t.x = 1; t.y = 2; t.Print(); // 会报错
- 生命周期:在内存中存在多久
- 作用域:在哪里能访问这个变量
例如对于一个函数,我们内部声明一个变量,其他函数是不能调用的,因为作用域就是函数这个本身。
// int x = 0; // 作用域是整个文件,容易被更改 void Test() { static int x = 0; // local static x++; std::cout << x << std::endl; } int main() { Test(); Test(); Test(); Test(); // 输出1,2,3,4 }
enum枚举
优化代码整洁度
enum Level { Error, Warning, Info }; int Error = 0; int Warning = 1; int Info = 2; //等价 Level Error = 2; //修改
类和namespace用::
对象用.