c++引用学习(二)

2015-01-25 11:43:19 · 作者: · 浏览: 31
int b)
?6 {
?7 ? ? return a - b;
?8 }
?9 int ?mul(int a, int b)
10 {
11 ? ? return a * b;
12 }
13 int ?divv(int a, int b)
14 {
15 ? ? return a / b;
16 }
17?
18 void mainY()
19 {
20 ? ? //函数指针数组int(*p[4])(int, int);
21 ? ? int(*p[4])(int, int){ add, sub, mul, divv };
22?
23 ? ? int(*(&rp)[4])(int, int)(p);//引用函数指针数组
24 ? ? for (int i = 0; i < 4;i++)//下标循环
25 ? ? {
26 ? ? ? ? cout << rp[i](100, 10) << endl;
27 ? ? }
28 ? ? for (int(**pp)(int, int) = p; pp < p + 4; pp++)//指针循环
29 ? ? {
30 ? ? ? ? int(** &rpp)(int, int)(pp);//引用二级函数指针
31 ? ? ? ? cout << (*rpp)(100, 10) << endl;
32?
33 ? ? }
34 ? ? cin.get();
35?
36 }
?
?
?
0x04:右值引用
?
C++11,引用右值
?
//如果不是左值,手动先拷贝到内存实体,才能引用
//我们无需拷贝,右值引用,编译器会自动帮我们拷贝到内存/
?
?1 void print(int && rint)//右值引用,一旦引用常住内存,编译器自己维护
?2 {
?3 ? ? cout << rint << endl;
?4 ? ? cout << (void*)&rint << endl;
?5 ? ? cout << "\n\n";
?6 }
?7?
?8?
?9 void ?main()
10 {
11 ? ? int x = 30;
12 ? ? print(x + 1);
13?
14 ? ? cout << "\n\n";
15 ? ? print(x + 2);
16?
17 ? ? cout << "\n\n";
18 ? ? print(x + 3);
19?
20 ? ? cout << "\n\n";
21 ? ? print(x + 4);
22 ? ? cin.get();
23?
24 }
?
?1 void ?main()
?2 {
?3 ? ? int x = 3;
?4 ? ? print(x + 1);
?5 ? ? int && rint(x + 3);//&&引用没有内存实体的临时变量
?6 ? ? cout << rint << endl;
?7 ? ? cout << "\n\n";
?8?
?9 ? ? cout << rint << endl;
10 ? ? cout << (void*)&rint << endl;
11 ? ? cin.get();
12 }
?