不一樣,一個是複製傳遞,一個是引用傳遞。 複製傳遞時將對象複製一遍,在函數中的對象和原對象值相同,但是地址不同,函數中若修改對象的值,原對象不會受到影響,當函數執行完時,複製的對象會被銷燬。 而引用傳遞不會複製,只是將原對象的地址傳過去,類似指針。此時函數中的對象和原對象是一個東西,相同的地址,可能名字不一樣而已。 一般傳遞對象時使用的是引用傳遞,效率更高。對象一般比較大,複製的話銷燬的時間較多。如要防止函數修改參數,可以使用const 引用。 附個演示代碼,你就知道了。
#include <iostream>
using namespace std; class A{ public: void set(int data) { this->data =data; } void show() { cout << data <<endl; } private: int data; }; void change(A a, A &b) { a.set(3); b.set(3); } int main() { A a, b; a.set(1); b.set(1); cout <<"before"<<endl; a.show(); b.show(); change(a,b); cout<<"after"<<endl; a.show(); b.show(); cout << "Hello World" << endl; return 0; }
The result is:
before 1 1 after 1 3 Hello World