static成员变量 singleton
- 静态变量a地址的高20位加载到a5中,
- a5的值(static a的高20位地址) + 偏移值(static a的低12位地址) -> 加载到a5中(现在a5中保存了静态变量a的32位地址)
- 把静态变量a的地址写入到返回值中。
如果声明为返回类型为&,实际也一样
如果使用返回void的方式来实现静态变量的singleton。
那么在B::f()中,
- 静态变量a的高20位地址写入a5
- 99这个值写入a4
- 把a4中存储的99这个值,写入到地址(a5+静态变量a的低12位偏移=静态变量a的32位地址对应的内存中)
可以看到这个静态变量a也是singleton
首次经过这个init时,才会执行。后续经过时,跳过。
第一次输入99,赋给x,进入了init。第二次给x赋值-99,init被跳过了。
本文来自博客园,作者:ijpq,转载请注明原文链接:https://www.cnblogs.com/ijpq/p/17352841.html