[英]C++ Why can I not save this pointer to a reference?
我希望得到一個指向映射的值元素(結構)的指針,並將這個指針保存在一個向量中。
第二個例子有什么問題?
示例 1(編譯但語義錯誤)
vector<Tstruct*> myvector {};
for (const map<int, Tstruct> &kv : mymap) {
auto y = kv.second; // a copy
myvector.push_back(&y); // ok! &y is a Tstruct*, but this is a pointer to a copy
}
示例 2(不編譯但旨在顯示預期語義)
vector<Tstruct*> myvector {};
for (const map<int, Tstruct> &kv : mymap) {
myvector.push_back(&kv.second); // &kv.second is not a valid argument here (why?)
}
我意識到這一定是一個新手問題,但四處搜索卻無法完全弄清楚; 我知道“X 的引用地址”=“X 的地址”,所以這看起來有點奇怪。
在您的for
循環中, kv
被聲明為const
,因此kv.second
字段是一個const Tstruct
。 取其地址將產生一個const Tstruct*
指針。 但是vector
一個非常量的Tstruct*
指針。 這就是為什么您的第一個示例有效但第二個示例失敗的原因。
請注意,您的第一個示例為vector
提供了一個指向本地Tstruct*
變量的指針,該變量在推送后立即超出范圍,從而使vector
帶有懸空指針。
如果mymap
不是const
那么kv
也不需要是const
,或者:
for (map<int, Tstruct> &kv : mymap) {
myvector.push_back(&kv.second);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.