《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 }
原文地址:https://www.cnblogs.com/shijianming/p/5300438.html