文章目录
- 1.inline函数
- 2.this指针
- 3.初始化顺序
1.inline函数
可以在同一个项目的不同源文件内定义函数名相同但实现不同的inline函数
inline函数会在调用的地方展开,所以符号表中不会有inline函数的符号名,不存在链接冲突。
2.this指针
A.静态成员函数没有this指针,只有非静态成员函数才有,且为隐藏指针
B.非静态成员函数的第一个参数就是隐藏的this指针
C.this指针是一个形参,存在栈上,但是VS下存在ECX寄存器下。编译器在生成程序时加入了获取对象首地址的相关代码,并把获取的首地址存在寄存器ECX中(其它编译器可能不同),也就是说成员函数的其它参数都正常存放在栈中,而this指针存放在ECX寄存器中,类的静态成员函数因为没有this指针这个参数,所以类的静态成员函数无法调用类的非静态成员变量****
D.单纯的对this赋空是不可以的,不过可以强转直接赋空,不过一般不进行这样的操作
2.
A.全局函数不具备this指针
B.static函数不具备this指针
C.友元函数不具备this指针
D.普通成员方法具有隐藏的this指针
3.初始化顺序
- 常量以及引用只能通过初始化列表初始化
- 静态成员,只能在类外初始化
- 代码题
class A{public:A(int a):_a1(a),_a2(_a1){}void Print(){cout<<_a1<<" "<<_a2<<endl;}private:int _a2;int _a1;}int main(){A aa(1);aa.Print();}
初始化顺序由定义类时的声明顺序决定,所以先初始化_a2,由于初始化_a2时_a1还未初始化,所以_a2为随机值
输出1 随机值
- 在一个cpp文件里定义了一个static类型的全局变量, 只能在该cpp所在的编译模块中使用该变量
static限制了变量具有文件域