指向指標的常量引用瞭解

lypbendlf發表於2024-05-31

轉自:chatgpt

1.介紹

struct Person{
    uint32_t age;
};
Person* getP(){
    Person* p =new Person();
    p->age = 5;
    return p;
}
int main() { 
    const auto & pp = getP();// 對指向 Person 物件的指標的常量引用

// auto pp = getP(); // pp 是一個普通的指標,或者使用普通指標

    cout<<pp->age;
    delete pp;
    cout<<endl;
    return 0;
} 

不加const的話會編譯報錯:

error: invalid initialization of non-const reference of type ‘Person*&’ from an rvalue of type ‘Person*’
auto & pp = getP();

因為 getP() 返回的是一個臨時的指標,而我們不能將一個非常量(non-const)的引用繫結到一個臨時物件(rvalue)上。臨時物件(temporary object)通常是函式返回值、字面量等,它們的生命週期在表示式結束時就結束。為了避免不必要的副作用,C++ 語言規定非常量引用(non-const reference)不能繫結到臨時物件上。

pp 是一個常量引用,指向一個指標型別(即 Person*)。const 保證了 pp 不能修改所引用的指標,但可以透過 pp 訪問和修改 Person 物件的內容。

相關文章