2013-10-17 48 views
1

鑑於這兩個函數聲明:不一致的行爲傳遞參數在C++

void initialize(int p, std::vector<Vector3> &); 
std::vector<Vector3> toNurbsCoords(std::vector<Vector3>); 

爲什麼這項工作

Nurbs nurbs; 
std::vector<Vector3> pts = nurbs.toNurbsCoords(points); 
nurbs.initialize(degree, pts); 

,而這將引發編譯時錯誤?

Nurbs nurbs;  
nurbs.initialize(degree, nurbs.toNurbsCoords(points)); 
//error: no matching function for call to 'Nurbs::initialize(int&, std::vector<Vector3>)' 
+0

欲瞭解更多信息,請參閱[這個問題](http://stackoverflow.com/q/19375634/1782465)。 – Angew

回答

3

因爲臨時不能綁定到非const引用。

nurbs.toNurbsCoords(points)是一個臨時的。在第一種情況下,初始化命名對象 - pts - 並通過它。在第二種情況下,您只需傳遞臨時文件。

+0

小修正:「臨時不能綁定到非const **左值**引用。」 (回想一下,臨時可以綁定到非const **右值**引用。) –