static成员变量 singleton

  1. 静态变量a地址的高20位加载到a5中,
  2. a5的值(static a的高20位地址) + 偏移值(static a的低12位地址) -> 加载到a5中(现在a5中保存了静态变量a的32位地址)
  3. 把静态变量a的地址写入到返回值中。


如果声明为返回类型为&,实际也一样



如果使用返回void的方式来实现静态变量的singleton。
那么在B::f()中,

  1. 静态变量a的高20位地址写入a5
  2. 99这个值写入a4
  3. 把a4中存储的99这个值,写入到地址(a5+静态变量a的低12位偏移=静态变量a的32位地址对应的内存中)

可以看到这个静态变量a也是singleton



首次经过这个init时,才会执行。后续经过时,跳过。
第一次输入99,赋给x,进入了init。第二次给x赋值-99,init被跳过了。

posted @ 2023-04-25 15:43  ijpq  阅读(7)  评论(0编辑  收藏  举报