轉自: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 物件的內容。