C++11新特性:尾置返回型別
阿新 • • 發佈:2019-02-17
尾置返回型別是在C++11標準中新增的語法,可以用於任何函式定義中,旨在方便複雜函式的定義。尾置返回型別跟在形參列表後面並以一個->符號開頭。為了表示函式真正的返回型別跟在形參列表之後,需要在本應該出現返回型別的地方放置一個auto關鍵字。
這樣看似乎新語法糖非常有用,但如果函式返回型別的複雜度進一步提升,情況就完全不一樣了。比如定義一個返回指向函式的指標的函式:
//宣告一個返回指向陣列的指標的函式
//傳統定義
int (* func1(int arr[][3], int n))[3]
{
return &arr[n];
}
//使用尾置返回型別後
auto func1(int arr[][3], int n) -> int(*)[3]
{
return &arr[n];
}
這樣看似乎新語法糖非常有用,但如果函式返回型別的複雜度進一步提升,情況就完全不一樣了。比如定義一個返回指向函式的指標的函式:
//原版本: int(*(*func2())(int arr[][3], int n))[3] { return func1; } //使用尾置返回型別的版本 auto func2() -> int (*(*)(int arr[][3], int n))[3] { return func1; }
這時候可以看出使用尾置返回型別與傳統定義在複雜度上沒什麼區別。個人認為對於複雜度較高的函式定義,還是用decltype更好。
本文程式碼部分印自Racal的個人部落格點選開啟連結
本文部分內容摘自《C++ Primer(中文版)第五版》