如果你想要寫一個迭代器,你平時寫瞭解常量
T* operator->() const;
我的問題是理解這一「常量」與指針和參考。
例如,你可以寫下面的結構:
struct A{
int* x;
A(int& x0):x{&x0}{}
int* ptr() const {return x;}
int& ref() const {return *x;}
};
你也可以使用這種方式:
int x = 10;
const A a{x};
int& r = a.ref();
int* p = a.ptr();
*p = 4;
cout << x << endl; // prints 4
r = 25;
cout << x << endl; // prints 25
但爲什麼這個編譯和作品的權利(至少g ++以及鐺)。爲什麼?
正如我所定義
const A a{x};
此 「a」 是常數。所以,當我打電話
int* p = a.ptr();
我打電話PTR()的const對象,因此內部指針A-> x必須爲 「int * const的」。但是我沒有const返回一個「int *」。爲什麼這是正確的?
而參考文獻會發生什麼?如果我用「const A」調用A :: ref(),那麼這個函數返回的類型是什麼?像「int & const」之類的東西? < ---我想這跟「int &」是一樣的。
感謝您的幫助。
你可以隨時複製一個常量。 – molbdnilo