《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 }
时间: 2024-10-03 14:45:22

《C++ Primer》学习 之 返回数组的引用(返回数组的指针,方法与之相同)的相关文章

C++ Primer 学习笔记_49_类与数据抽象 --隐含的this指针

类 --隐含的this指针 引言: 在前面提到过,成员函数具有一个附加的隐含形参,即指向该类对象的一个指针.这个隐含形参命名为this,与调用成员函数的对象绑定在一起.成员函数不能定义this形参,而是有编译器隐含地定义.成员函数可以显式的使用this指针,但不是必须这么做. 1.何时使用this指针 有一种情况下,我们必须显式使用this指针:当需要将一个对象作为整体引用而不是引用对象的一个成员时. 比如在类Screen中定义两个操作:set和move,可以使得用户将这些操作的序列连接成一个单

c/c++ 函数指针 指针函数 数组的引用 指针数组 数组指针

1.指针数组数组指针 引用数组 数组的引用 int *a[10] 指针数组 每一个元素都是一个指针 Int (*a)[10] 数组指针 P指向一个含有10个元素的数组 Int (&a)[10] 数组的引用 a是一个数组的引用 Int& a[10] 引用函数 非法 数组的引用:1.在程序体中 int a[10]; Int (&p)[10]=a;//引用数组 2.作为参数 #include <iostream> #include <string> using n

C++ Primer 学习笔记_19_类与数据抽象(5)_初始化列表(const和引用成员)、拷贝构造函数

C++ Primer 学习笔记_19_类与数据抽象(5)_初始化列表(const和引用成员).拷贝构造函数  从概念上将,可以认为构造函数分为两个阶段执行: 1)初始化阶段: 2)普通的计算阶段.计算阶段由构造函数函数体中的所有语句组成. 一.构造函数初始化列表 推荐在构造函数初始化列表中进行初始化 1.对象成员及其初始化 <span style="font-size:14px;">#include <iostream> using namespace std;

C++ Primer 学习笔记_20_类与数据抽象(6)_深拷贝与浅拷贝、空类与空数组

C++ Primer 学习笔记_20_类与数据抽象(6)_深拷贝与浅拷贝.空类与空数组 一.深拷贝与浅拷贝 浅拷贝:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换而言之,浅拷贝仅仅复制所考虑的对象,而不复制它所引用的对象. 深拷贝:被复制对象的所有变量都含有与原来的对象相同的值,除去那些引用其他对象的变量.那些引用其他对象的变量将指向被复制过的新对象,而不再是原有的那些被引用的对象.换而言之,深拷贝把要复制的对象所引用的对象都复制了一遍. 浅拷贝可

C++Primer 学习笔记之指针和引用

1.引用概念 引用引入了对象的一个同义词.定义引用的表示方法与定义指针相似,只是用&带起了*. 例如:Point pt1(10,10); Point &pt2 = pt1;//定义pt2为pt1的引用.通过这样的定义,pt1和pt2表示同意对象,需要特别强调的是引用并不是产生对象的副本,仅仅是对象的同义词.因此,当下面的语句执行后: pt1.ofset(2,2); pt1和pt2都具有了(12,12): 引用必须在定义的时候马上初始化,因为它必须是某个东西的同义词.你不能先定义一个引用后才

Java学习---- 数组的引用传递

1. public class ArrayRefDemo01{ public static void main(String args[]){ int temp[] = {1,3,5} ; // 利用静态初始化方式定义数组 fun(temp) ; // 传递数组 for(int i=0;i<temp.length;i++){ System.out.print(temp[i] + ".") ; } } public static void fun(int x[]){ // 接收整型

C++ Primer 学习笔记与思考_5 数组和动态数组易错点解读

1. 数组的定义 数组定义中的类型名可以是内置数据类型或者类类型:除了引用之外,数组元素的类型还可以是任意的复合类型.另外,非const变量以及要到运行阶段才知道其值的const变量都不能用于定义数组的维数. #include <iostream> #include <string> #include <cstring> #include <bitset> using namespace std; int main() { const int MAXN1 =

C++ Primer 学习笔记_77_模板与泛型编程 --实例化

模板与泛型编程 --实例化 引言: 模板是一个蓝图,它本身不是类或函数.编译器使用模板产生指定的类或函数的特定版本号.产生模板的特定类型实例的过程称为实例化. 模板在使用时将进行实例化,类模板在引用实际模板类型时实例化,函数模板在调用它或用它对函数指针进行初始化或赋值时实例化. 1.类的实例化 当编写Queue<int>qi时,编译器自己主动创建名为Queue<int>的类.实际上,编译器通过又一次编写Queue模板,用类型int取代模板形參的每次出现而创建Queue<int

C++ Primer 学习笔记_55_类与数据抽象 --析构函数

复制控制 --析构函数 引言: 在构造函数中分配了资源之后,需要一个对应操作自动回收或释放资源.析构函数就是这样的一个特殊函数,它可以完成所需的资源回收,作为类构造函数的补充. 1.何时调用析构函数 撤销类对象时会自动调用析构函数: Sales_item *p = new Sales_item; { Sales_item item(*p); //调用复制构造函数 delete p; //调用指针p的析构函数 } //调用对象item的析构函数 动态分配的对象只有在指向该对象的指针被删除时才撤销,