簡體   English   中英

將結構向量推入該向量的元素

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

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