c/c++中const成员函数的返回值类型
2017-01-05 20:31
477 查看
const成员函数又称为访问函数,在const函数体内不能修改成员变量的值。
那么对于const函数的返回值呢?
结合网上内容,写了一个小的实验代码,
针对最后一个函数的问题,又写了个小测试: int a = 10;
int b = 100;
int *p = &a; //正确
int* & p2 = p;//正确,p2是p的引用
const int* p3 = p;//正确,p3是常量指针
p3 = &b;//改变p3,p不会改变的
//const int* & p3 = p;//错误。这是从"指针的常引用"的角度来写的。提示:无法用"int *"类型的值初始化"const int* &"类型的引用(非常量限定)
const int* & p4 = p3;//正确。这是从"常量指针的引用"的角度来写的。p4是常量指针p3的引用。
p4 = &a;//改变p4,p3也会改变的
//const int* &应该读成“常量指针的引用”还是“指针的常引用”????
//从上面例子看,应该读成“常量指针的引用”。
//这只是表面现象,本质还是不清楚.........??????
const const int* & p5 = p3;//是不是称作“常量指针的常引用”???
p5 = &b; //如果是,那么此处修改p5并不会影响p3,但实际上p3也改变了........??????还有一些问题不懂。。。
那么对于const函数的返回值呢?
结合网上内容,写了一个小的实验代码,
class T{ public: struct pNode{ int x; int y; }; //在const内修改成员变量的值,错误 void modify() const{ p1.x = 10;//p1是对象,p1的内容包括了x和y,所以修改p1中的x是不对的。 } //想访问pNode中的x,但返回类型不对,应该是const int &。 int & get1() const{ return p1.x;//p1是对象,p1的内容包括了x和y,如果提供int &型的引用,那么在主函数中可通过get1()=10来修改p1.x } //破坏了封装性 //get()函数虽然没有报错,但不安全,因为这样破坏了封装。 int & get() const{//为什么没有报错?因为p是指针,我们并没有直接修改p指针,也没有为p提供引用类型的返回 return p->x; //但为什么又破坏封装性了呢?在于返回值类型int &。int &为p->x提供了一个引用借口, } //在主函数中我们可以使用 get()=10; 这样的语句来修改p->x的值。 const pNode* & getp() const{//返回指针的常引用 return p;//按理说是正确的啊,按实际却是错的。为什么??? } private: pNode *p; pNode p1; };
针对最后一个函数的问题,又写了个小测试: int a = 10;
int b = 100;
int *p = &a; //正确
int* & p2 = p;//正确,p2是p的引用
const int* p3 = p;//正确,p3是常量指针
p3 = &b;//改变p3,p不会改变的
//const int* & p3 = p;//错误。这是从"指针的常引用"的角度来写的。提示:无法用"int *"类型的值初始化"const int* &"类型的引用(非常量限定)
const int* & p4 = p3;//正确。这是从"常量指针的引用"的角度来写的。p4是常量指针p3的引用。
p4 = &a;//改变p4,p3也会改变的
//const int* &应该读成“常量指针的引用”还是“指针的常引用”????
//从上面例子看,应该读成“常量指针的引用”。
//这只是表面现象,本质还是不清楚.........??????
const const int* & p5 = p3;//是不是称作“常量指针的常引用”???
p5 = &b; //如果是,那么此处修改p5并不会影响p3,但实际上p3也改变了........??????还有一些问题不懂。。。
相关文章推荐
- C++关于参数为const引用类型的函数调用参数成员函数的一个问题
- c/c++: c++函数返回类型什么情况带const
- [跨平台C++] 返回const char* 类型的函数样板
- c/c++笔试题——const类型的成员函数内部如何改变成员变量
- 【C++总结】函数形参,返回const对象与非const对象,成员函数,函数指针
- c/c++笔试题——const类型的成员函数内部如何改变成员变量
- c/c++笔试题——const类型的成员函数内部如何改变成员变量
- c++ const成员函数
- 当C++函数的返回类型为一个类时
- c++对象成员函数返回自身引用时出现的诡异问题及解决办法
- [C++] 类成员函数后加 const
- C++基础之const成员函数
- c++ const: const 变量, const 输入参数, const 返回值, const 成员函数
- C++中的const成员函数和mutable关键字
- warning C4183: “GetDocument”: 缺少返回类型;假定为返回“int”的成员函数
- const类型的成员函数内部如何改变成员变量
- C++成员函数末尾const关键字的作用
- c++ const 与成员函数
- c++ const 成员函数
- c++学习之const成员变量与成员函数