const常引用(const + &)避免函式引數的雙向傳遞
阿新 • • 發佈:2018-12-16
在c++可以使用引用傳遞作為函式的形參傳入函式,相較於值傳遞的方式,引用傳遞能夠節省函式使用時的記憶體分配,不需要像值傳遞一樣拷貝實參。對於普通的資料型別可能看出引用的優勢,但是如果函式的傳入引數是一個十分複雜的結構體或者類,那麼引用傳遞可以節省很大的記憶體開銷。
然而,由於引用傳遞是雙向的,當在函式中對於形參的資料進行改變後,實參的值也會進行相應的改變,如下所示:
#include <iostream> using namespace std; struct Point { int x; int y; Point(int a, int b) { x=a; y=b; } }; void fun(Point& point); int main() { Point point(1,1); fun(point); point.x++; point.y++; cout << "======main======" << endl; cout << "點的座標為(" << point.x << "." << point.y << ")" << endl; return 0; } void fun(Point& point) { point.x++; point.y++; cout << "======fun======" << endl; cout << "點的座標為(" << point.x << "," << point.y << ")" << endl; }
執行結果如圖,可以看出來函式將引用傳入的值改變了
如果我們既不想改變傳入引數的值,也不想因為值傳遞產生太大的開銷,那麼可以嘗試一下使用常引用。
void fun(const Point& point)
{
point.x++;
point.y++;
cout << "======fun======" << endl;
cout << "點的座標為(" << point.x << "," << point.y << ")" << endl;
}
如圖,如果我們將程式碼改成這樣,可以發現編譯無法成功,編譯器會報錯: