2017-04-14 63 views
1

我正在研究Stroustrup的原則和實踐的第18章,並將其與複製構造函數相關的一部分進行了簡化。何時在C++中調用複製構造函數? - 函數返回

我有一個拷貝構造函數定義爲:

X(const X& x) { 
    out("X(X&)"); 
    val = x.val; 
} 

X是一個結構。 val爲只是X. '出' 的一個int值:

void out(const string& s) { 
    cerr << this << "->" << s << ": " << val << "\n"; 
} 

我還具有以下2個功能定義爲:

X copy(X a) { 
    return a; 
} 

X copy2(X a) { 
    X aa = a; 
    return aa; 
} 

在主我有:

X loc(4); 
X loc2 = loc; 
loc2 = copy(loc); 
loc2 = copy2(loc); 

當我只是調用複製時,複製構造函數被調用兩次:複製參數範圍一次,返回調用一次。這對我有意義。

但是,當我調用copy2時,複製構造函數仍然只調用兩次:一次是函數參數,一次是'X aa = a'。爲什麼不要求回報?

回答