class A {
public:
void show() {
cout << &this; // 編譯錯誤:不能取 this 地址
}
};
this 是右值表達式,不佔用內存地址。編譯器將 this 指針值存放在寄存器中(MSVC 為 ECX,GCC 為 RDI/RSI 等),而非棧內存。寄存器無地址,不可取址。
¶mthis 指針:存寄存器,無地址,不可取址void show() {
A* ptr = this; // 正確:複製指針值
cout << ptr; // 打印指針值
// cout << &this; // 錯誤
// cout << &ptr; // 正確:ptr 是局部變量,有地址
}
this 本質是編譯器隱式傳遞的指針參數,調用約定規定通過寄存器傳遞以提高效率。C++ 標準規定 this 為右值,不保證有地址。