您的位置:首页 > 编程语言 > C语言/C++

c/c++中const成员函数的返回值类型

2017-01-05 20:31 477 查看
const成员函数又称为访问函数,在const函数体内不能修改成员变量的值。

那么对于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