首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C++ 類中無法取 this 指針地址的原因:存儲在寄存器中

     編輯:程式設計疑難解答

現象

class A {
public:
    void show() {
        cout << &this; // 編譯錯誤:不能取 this 地址
    }
};

原因

this 是右值表達式,不佔用內存地址。編譯器將 this 指針值存放在寄存器中(MSVC 為 ECX,GCC 為 RDI/RSI 等),而非棧內存。寄存器無地址,不可取址。

對比

  • 普通參數:存棧上,有地址,可取址 ¶m
  • this 指針:存寄存器,無地址,不可取址

驗證方法

void show() {
    A* ptr = this;        // 正確:複製指針值
    cout << ptr;          // 打印指針值
    // cout << &this;     // 錯誤
    // cout << &ptr;      // 正確:ptr 是局部變量,有地址
}

深度理解

this 本質是編譯器隱式傳遞的指針參數,調用約定規定通過寄存器傳遞以提高效率。C++ 標準規定 this 為右值,不保證有地址。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved