為什么我可以operator&從 (*iterator) 執行一個,但不能復制值 (*iterator) ?
std::vector<int> v; // yes, container is empty
for (int i = 0; i < 10; i) {
auto it = v.begin();
std::cout << &*(it) << std::endl; // 0 <- why not EXC_BAD_ACCESS?
auto value = *(it); // EXC_BAD_ACCESS
auto address = &value;
}
uj5u.com熱心網友回復:
v是空的,因此v.begin() == v.end()取消參考it是未定義的。
uj5u.com熱心網友回復:
從理論上講,兩者都有未定義的行為,任何一種情況都可能發生任何事情。
在實踐中,&*(it)不訪問任何記憶體;您無需從記憶體中的某個位置讀取以確定該位置是什么。
(有點類似,你不用輸入就可以知道房子的地址,房子甚至不必存在。)
另一方面,復制某些內容確實需要您閱讀該內容是什么。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/517230.html
標籤:C 标准向量
