在以下代碼中:
#include<iostream>
using namespace std;
void fun(T1 x, T2 y, T3 z){
// some code
}
int main(){
T1 a;
T2 b;
T3 c;
fun(a,b,c);
}
我想了解,函式“fun”中的引數(x、y 和 z)如何被函式呼叫期間傳遞的引數(a、b 和 c)初始化。復制建構式是否被呼叫,然后初始化發生 T1 x = a; T2 y = b; T3 z = c; 或發生其他事情?
請解釋。
uj5u.com熱心網友回復:
是否呼叫了復制建構式,然后初始化就像
T1 x = a; T2 y = b; T3 z = c;
是的,事情就是這樣發生的。考慮到 C 中不同型別初始化的數量,這是一個令人印象深刻的猜測。
它被稱為復制初始化:(通常并不一定意味著呼叫了復制建構式)
[dcl.init.general]/14以大括號或相等初始化器或條件 ([stmt.select])的形式發生的
=初始化,以及在引數傳遞、函式回傳、拋出例外 ([except.throw])、處理例外中([except.handle]) 和聚合成員初始化 ([dcl.init.aggr]) 稱為復制初始化。
“=大括號或相等初始化器的形式”指的是T1 x = a;,而“引數傳遞”不言自明。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/472148.html
標籤:C
上一篇:如何使用PCL進行顏色過濾
下一篇:移動“this”的語意?
