广州网站开发公司排名我想做app推广怎么做
这篇文章是我看Siki学院学习的笔记,学习的地址如下:
http://www.sikiedu.com/my/course/518
因本人才疏学浅,如有错误之处,还请见谅
Const形参和实参
顶层const:表示任意的对象是常量
底层const:与指针和引用等复合类型有关
对指针而言,顶层const表示指针本身是个常量,而底层const表示指针所指的对象是一个常量。
PS:指针类型,既可以是顶层const也可以是底层const.
基础知识
#include<iostream>
using namespace std;
int main(void) {//定义两个int //num1就是普通int num2是int类型的常量int num1 = 20;const int num2 = 10;int* p1 = &num1;//错误,应为num2是常量,p2不可以修改num2的值//int* p2 = &num2;//底层的const,可以修改指针p2,p3指向的对象,但是不能//通过p2,p3来修改它们指向的对象的值const int* p2 = &num1;const int* p3 = &num2;//顶层的const,不可以修改p5指向的对象,但是可以通过//p5来修改num1的值int* const p5 = &num1;//int* const p6 = &num2;int &r1 = num1;//int &r2 = num2;//const int类型的引用,不能修改r3,r4的值//可以使用int类型和const int类型的初始化const int& r3 = num1;const int& r4 = num2;return 0;
}
在函数里面的应用
① 指针和普通形参
#include<iostream>
using namespace std;
int cube1(int i);
int cube2(const int i);
int pCube1(int* pi);
int pCube2(const int* pi);
int pCube3(int* const pi);
int main(void) {int num1 = 20;const int num2 = 10;//实参是int或者const int都可以//因为不管实参是什么,这个函数都只是用了一下它们的值//可以修改形参icout << cube1(num1) << " " << cube1(num2) << endl;//实参是int或者const int都可以//因为不管实参是什么,这个函数都只是用了一下它们的值//不可以修改cout << cube2(num1) << " " << cube2(num2) << endl;//num2会出错,因为*pi可能会修改num2的值,num2又是一个常量//会引发冲突.cout << pCube1(&num1) << endl;cout << pCube2(&num1) <<" "<< pCube2(&num2) << endl;cout << pCube3(&num1) << endl;return 0;
}
int cube1(int i) {i = 0;return i * i * i;
}
int cube2(const int i) {return i * i * i;
}
int pCube1(int* pi) {return *pi * (*pi) * (*pi);
}
//可以修改pi的指向,但是不能通过pi修改pi指向的值
//可以是int也可以是const int
int pCube2(const int* pi) {return *pi * (*pi) * (*pi);
}
//不能修改pi的指向,但是可以通过pi修改pi指向的值
//只能是int类型
int pCube3(int* const pi) {*pi = 0; //这是可以的//所以不能为const int类型return *pi * (*pi) * (*pi);
}
② 引用
#include<iostream>
using namespace std;int rCube1(int& r);
int rCube2(const int& r);int main(void) {int num1 = 20;const int num2 = 10;cout << rCube1(num1) << endl;cout << rCube1(num1) << " " << rCube2(num2) << endl;return 0;
}
//可以修改r,只能是int类型
int rCube1(int& r) {return r * r * r;
}
//不能修改r,int和const类型都可以
int rCube2(const int& r) {return r * r * r;
}
总结
① 指针和引用的话,就看形参能不能改变实参的值.如果可以改变,那么const就不行
② 没有用到指针和引用的话,就要注意不能改变const常量的值,还有变量的作用域和临时变量的存在
③ 具体问题,具体分析
如果这篇文章对你有张帮助的话,可以用你高贵的小手给我点一个免费的赞吗
相信我,你也能变成光.
如果你有任何建议,或者是发现了我的错误,欢迎评论留言指出.