可以直接呼叫建構函式產生無名物件。
例如,下面的**在函式fn()中,建立了乙個無名物件:
class student
;void fn()
無名物件可以作為實參傳遞給函式,可以拿來拷貝構造乙個新物件,也可以初始化乙個引用的宣告。
例如,下面的**表達了無名物件的典型的三種用法:
void fn(student& s);
int main()
主函式開始執行時,第乙個執行的是拿無名物件初始化乙個引用。由於是在函式內部,所以無名物件作為區域性物件產生在棧空間中,從作用域上看,該引用與無名物件是相同的,它完全等價於student refs = "ranny";所以這種使用是多餘的。
第二個執行的是用無名物件拷貝構造乙個物件s。按理說c++先呼叫建構函式student(char*);建立乙個無名物件,然後再呼叫拷貝建構函式 student(student&);(或許是預設的)建立物件s;但是,由於是用無名物件去拷貝建立乙個物件,拷貝完後,無名物件就失去了任何 作用,對於這種情況,c++特別將其看作為student s = "jenny";效果一樣,而且可以省略建立無名物件這一步。
第三個執行的是無名物件作為實參傳遞給形參s,c++先呼叫建構函式建立乙個無名物件,然後該無名物件初始化了引用形參s物件,由於實參是在主函式中,所以無名物件是在主函式的棧區中建立,函式fn()的形參s引用的是主函式棧空間中的乙個物件。它等價於:
student s("danny");
fn(s);
如果物件s僅僅是為了充當函式fn()實參的需要,完全可以用第三個執行來代替。
當執行到主函式結束的時候,將有乙個主函式中的s物件和3個無名物件被析構。
C 無名物件
可以直接呼叫建構函式產生無名物件。例如,下面的 在函式fn 中,建立了乙個無名物件 class student void fn 無名物件可以作為實參傳遞給函式,可以拿來拷貝構造乙個新物件,也可以初始化乙個引用的宣告。例如,下面的 表達了無名物件的典型的三種用法 void fn student s i...
C 無名命名空間詳解
將一組宣告包裹在乙個命名空間中就是為了避免可能的名字衝突,保持 的區域性性。例如,一段 示例 include header.h namespace mine int g 但是有時我們並不希望名字mine被區域性的環境之外知道,此時名字mine似乎多餘了,因此我們可以省去這個mine名字 直接改寫為 ...
c pipe 管道 c 筆記 無名管道
概述 管道也叫無名管道,它是unix系統ipc 程序間通訊 的最古老形式,所有的unix系統都支援這種通訊機制 特點 雙半工,資料在同一時刻只能在乙個方向上流動 資料只能從管道一端寫入,從另一端讀出 寫入管道中的資料遵循先入先出的規則 管道所傳送的資料是無格式的,這要求管道的讀出方與寫入方要事先約定...