1. 程式人生 > >c++ 函式的返回值

c++ 函式的返回值

函式返回值

  1. 不要返回區域性物件的引用或者指標
  2. 引用返回左值,其他返回型別得到右值
  3. 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);