c++ 函式的返回值
阿新 • • 發佈:2018-12-25
函式返回值
- 不要返回區域性物件的引用或者指標
- 引用返回左值,其他返回型別得到右值
- main函式返回值中,0表示成功,其他表示識別。
列表初始化返回值
c++ 11新標準規定, 函式可以返回花括號包圍的值列表。其實,就是使用列表初始化的方式對錶示函式返回的臨時變數進行初始化。
vector<string> process()
{
return {"funca", "funcb"};
}
返回陣列指標
因為陣列不能被拷貝, 所以不能返回陣列。 不過函式可以返回陣列的指標或引用, 只是返回型別的定義比較繁瑣。
int (*func(int i))[10] {} // 表示返回一個大小為10 ,型別為int型的陣列。
如果不想定義這麼複雜,可以使用類型別名的方式;
typedef int Array[10]; // Array是一個類型別名
Array* func(int i){}
使用尾置返回型別
同樣是c++ 11標準, 任何函式都可以定義尾置返回,只是這種方式更適合用在定義返回型別比較複雜的函式,比如返回型別是陣列的指標或引用的。
auto func(int i) -> int(*)[10]
使用decltype
如果你已經知道函式返回的指標指向哪個陣列,那麼就可以使用decltype,它不會把陣列轉換為指標
int a = {1, 2, 3 };
decltype(a) * func(int i);