2014-11-08 44 views
-1

我做了一個在C Vector類++,我的問題是,如果我做<<運營商不計算表達式正確

Vector v = v1 + v2; 
cout << v 

結果是正確的,然而做 cout << v1 + v2

[-1.07374e+008 -1.07374e+008 -1.07374e+008]代替的[1, 2, 4]

同樣適用於其他運營商,我實現, 這裏是我的+符實現

Vector& Vector::operator+= (const Vector& other) { 
    x += other.x; 
    y += other.y; 
    z += other.z; 
    return *this; 
} 

Vector& operator+ (const Vector& v1, const Vector& v2) { 
    Vector v = v1; 
    v += v2; 
    return v; 
} 

和< <操作

ostream& operator<< (ostream& o, const Vector& v) { 
    o << "[" << v.x << " " << v.y << " " << v.z << "]; "; 
    return o; 
} 

我沒有MENAGE發現一個錯誤,我在這裏似乎是正確的。任何人都可以知道爲什麼發生這種情況

+1

在'operator +'中,您將返回一個具有自動持續時間的本地變量的引用。這是未定義的行爲。你應該用價值來回報它。 – 2014-11-08 12:04:55

回答

1

由價值迴歸的新載體:

Vector operator+ (const Vector& v1, const Vector& v2) 
// ^no '&' 

你返回到本地變量,它已被破壞的,你可以使用引用時的基準。你的編譯器應該警告這個;確保您在編譯時啓用了所有合理的警告。

+0

謝謝,我的編譯器告訴我什麼都沒有。所以據我瞭解我做了什麼工作,但並不總是因爲做這種事情是'未定義的',還是有另一種解釋爲什麼它在某些情況下工作? – user3758262 2014-11-08 12:42:05

+0

編譯器必須提出警告! – Ajay 2014-11-08 12:54:02

+0

@Ajay:只有在警告被啓用的情況下。可悲的是,一些編譯器默認不啓用它們。 – 2014-11-08 13:04:16