簡體   English   中英

C++ 為什么我不能保存這個指向引用的指針?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM