[英]Pushing into a vector of struct an element of that vector
我已經聲明了這樣的結構:
struct Point{
double x,y;
Point(){}
Point(double xx,double yy): x(xx),y(yy){}
};
而我正試圖填充這樣的矢量:
vector<Point> s(1);
Point tmp(1,2);
s[0]=tmp;
s.push_back(s[0]);
不幸的是,當我顯示s [1]的內容時,這樣做會給我一個錯誤的答案,但是s.push_back((Point)s[0])
會導致預期的答案(例如s [0]的副本)。
s.push_back(s[0])
和s.push_back((Point)s[0])
有什么區別來解釋這種差異?
是否有任何自動類型轉換或引擎蓋下的東西?
push_back
通過const引用獲取參數(以及rvalue引用的其他重載),所以
s.push_back(s[0]);
使用第一個元素的左值引用,但是,如果容量不夠大, push_back
可能會重新分配。 所以從s[0]
拉出的參考是懸空的,不再可行。
另一方面
s.push_back((Point)s[0]);
創建一個臨時的,然后不再使用s[0]
,允許在vector
推送一個有效的Point
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.