c函式引數為物件和為物件的引用型別時,作用一樣嗎

2021-05-28 02:28:30 字數 1445 閱讀 2565

1樓:王天旻

不一樣,一個是複製傳遞,一個是引用傳遞。

複製傳遞時將物件複製一遍,在函式中的物件和原物件值相同,但是地址不同,函式中若修改物件的值,原物件不會受到影響,當函式執行完時,複製的物件會被銷燬。

而引用傳遞不會複製,只是將原物件的地址傳過去,類似指標。此時函式中的物件和原物件是一個東西,相同的地址,可能名字不一樣而已。

一般傳遞物件時使用的是引用傳遞,效率更高。物件一般比較大,複製的話銷燬的時間較多。如要防止函式修改引數,可以使用const 引用。

附個演示**,你就知道了。

#include

#include

using namespace std;

class a

void show()

private:

int data;

2樓:凌漢晨

傳值相當於在函式內重新定義一個物件,把引數引用

的物件賦值給這個新定義的物件。在函式內對物件的操作都是針對新定義的物件,函式退出後,新定義物件就不存在了。傳址呼叫則沒有定義新物件,函式內的操作就是對引用物件本身的操作。

3樓:有你好幸福啊

函式引數有直接變數(如int、char、double等)型別、指標型別和引用型別。

如果引數是變數,傳遞方式是傳值,就是將實參的值複製(複製,意味著空間消耗和時間消耗)到「棧」空間中。

如果引數是指標,傳遞方式是傳址,需將指標複製(同樣也消耗空間和時間,對於陣列而言,只需儲存陣列首地址)到「棧」空間中。

如果是引用,則既不是傳值,也不是傳址,主調函式和被調函式共享引數的存放地址,與全域性變數共享方式相同。

對於拷貝(複製)建構函式而言,類物件通常需要較多的儲存空間,如果按值傳遞,必然會較大消耗「棧」空間,也需要較多的時間實施複製過程。因為複製建構函式不會修改引數的內容,也不會修改引數的屬性,所以建構函式的引數應該是常量引用傳遞,如

4樓:粒粒載畝

作用當然是不一樣的,前者是對源物件的賦值。

後者是對源物件的地址的賦值。

後者以指標的操作會影響到原來的物件,而前者不會。

5樓:魔尊

當然會不同啊,p的值只在改函式裡面會有所變化,函式呼叫一結束,p又回到之前的值,沒有任何的改變,出淤泥而不染;而q就不同了,被感染了,它的值會儲存起來,函式呼叫結束了,它就不再是剛開始呼叫的那個值了,而是呼叫之後的新值。

6樓:秋天來了仔陳

這麼講吧

void fun(int x,int y)與void fun(int &x,int &y)不同,上一個沒有交換成功,下一個交換成功了的,引用就是用別名,還是對那個數操作,不知聽懂了嗎。

c函式返回值為引用型別時出錯大神進

我不是大神,但我大概知道你是怎麼回事。你的引數是const string 型別,首先你要知道string 前為什麼要加const.還有你要知道const物件和非const物件的區別在 物件前加const,則只能呼叫該物件的const方法,換句話說,不能對其進行任何內容上的修改。而傳 是因為要避免複製...

學前教育是以什麼和什麼為物件的研究領域

學前教育 bai學是指從初生到六歲前du兒童的教 zhi育。學前教育學就是專dao門研回究學前教育的規律的科學。答 學前教育學是以什麼和學前教育問題為物件的一個研究領域 學前bai 教育學是指從初生到六 du歲前兒童的zhi教育。學前教育學就是專門研究dao學前教育專 國內外關於幼兒社會領域教育的研...

求,Python的C擴充套件程式中傳遞引數為結構體,怎麼傳遞

基於文字文件 markdown 設想好需要的基本需要的表 欄位 型別 使用 rails migration 隨著功能的開發逐步建立表 隨著細節功能的開發 需求,逐步增加欄位,刪除欄位,或者調整欄位型別 第一個 release 的時候清理 migrations 合併成一個 隨著後期的改動,逐步增加 修...