《C++ Primer》学习 之 返回数组的引用(返回数组的指针,方法与之相同)
/*
返回数组的引用(返回数组的指针,方法与之相同)
共四种方法(在下面示例程序中,调用其中一种方法时,需要将其他三种方法注释掉)
*/
1 #define _CRT_SECURE_NO_WARNINGS 2 #define HOME 3 #include <iostream> 4 #include <stdexcept> 5 #include <ctype.h> 6 #include <locale> 7 #include <iterator> 8 #include <cmath> 9 #include <string> 10 #include <vector> 11 #include <initializer_list> 12 #include <ctime> 13 using namespace std; 14 15 string strArr[10]; 16 17 // 调用其中一种方法时,需要将其他三种方法注释掉 18 // 法一:基本写法 19 string (&returnArrRef())[10] 20 { 21 return strArr; 22 } 23 24 // 法二:类型别名 25 using strArrT = string[10]; 26 strArrT& returnArrRef() 27 { 28 return strArr; 29 } 30 31 // 法三:尾置返回类型 32 auto returnArrRef() -> string(&)[10] 33 { 34 return strArr; 35 } 36 37 // 法四:使用decltype关键字 38 decltype(strArr) &returnArrRef() 39 { 40 return strArr; 41 } 42 43 int main(int argc, char **argv) 44 { 45 #ifdef HOME 46 //freopen("in", "r", stdin); 47 //freopen("out", "w", stdout); 48 #endif 49 50 for (int i = 0; i < 10; ++i) 51 { 52 strArr[i] = '0' + i; 53 } 54 string (&strArrTmp)[10] = returnArrRef(); 55 for (int i = 0; i < 10; ++i) 56 { 57 strArrTmp[i] = '1' + i; 58 } 59 60 for (int i = 0; i < 10; ++i) 61 { 62 cout << strArr[i] << endl; 63 } 64 65 #ifdef HOME 66 std::cerr << "Time elapsed: " << clock() / CLOCKS_PER_SEC << " ms" << endl; 67 #endif 68 return 0; 69 }