const成员函数返回数组名
2012-10-12 17:08
197 查看
例1:
例2:自CSDN帖子
两个类,同样是两个const的成员函数,返回值都是int指针
但是类A实际返回的是一个数组,类B则返回的是一个指针
但是类A不能通过编译,类B可以,这是为什么?
原因:
在 A 的 const 函数里, m_array 的类型是 int const [10], 即 const int *
在 B 的 const 函数里, m_point 的类型是 int * const.
即一个指向的类型是 const 的, 一个是指针本事是 const 的.
指向的类型不同的指针是不能互相转换的.
A中函数返回数组 而且是const函数 说明这个数组成员返回时被限定为const 返回数组时是返回数组的首地址 而且这个首地址是不变的 这就意味着返回的指针本身是const 它所指向的对象也是const 即实际返回类型应为const int* const
B中函数返回一个成员指针 而且也是const函数 说明这个成员指针本身被限定为const 注意 只是它本身被限定 它所指向的对象就不保证被限定为const 所以它实际应返回 int* const
根据C++标准 指向const对象的指针不能给指向非const对象的指针初始化和赋值 而你指定的返回类型都为int* 即非const指针 函数返回时要用实际被返回的内容初始化返回值 这里问题就出来了 前者实际需要返回指向const对象的指针 而你指定了返回类型为指向非const对象的指针 这里就违背了C++标准 而后者实际返回的指针本身为const 但它所指向的对象为非const 所以它可以初始化返回值..
#include<iostream> using namespace std; struct str { string a; string b; }; class B { private: int a; struct str s[10]; //数组名可以转换为指向其指代实体的指针,而且是一个指针常量 public: void sets(string str,int n=10) { for(int i=0;i<10;i++) { s[i].a=str; s[i].b=str; } } //或者 cosnt str * gets() const{return s; }//第2个const表示 s被限定为const指针,所以返回类型也要求是const型。 str* gets(){ return s; }//如果是str* gets()const{return s;}则会报const *转非const *的类型错误 }; int main() { B b; b.sets("hello"); str* st=b.gets(); for(int i=0;i<10;i++) { cout<<"a"<<i<<" "<<st[i].a<<endl; cout<<"b"<<i<<" "<<st[i].b<<endl; } getchar(); return 0; }编译运行正确。
例2:自CSDN帖子
两个类,同样是两个const的成员函数,返回值都是int指针
但是类A实际返回的是一个数组,类B则返回的是一个指针
但是类A不能通过编译,类B可以,这是为什么?
class A { public: int* f1() const { return m_array; } int m_array[10]; }; class B { public: int* f1() const { return m_point; } int* m_point; };和上例一样的效果。
原因:
在 A 的 const 函数里, m_array 的类型是 int const [10], 即 const int *
在 B 的 const 函数里, m_point 的类型是 int * const.
即一个指向的类型是 const 的, 一个是指针本事是 const 的.
指向的类型不同的指针是不能互相转换的.
A中函数返回数组 而且是const函数 说明这个数组成员返回时被限定为const 返回数组时是返回数组的首地址 而且这个首地址是不变的 这就意味着返回的指针本身是const 它所指向的对象也是const 即实际返回类型应为const int* const
B中函数返回一个成员指针 而且也是const函数 说明这个成员指针本身被限定为const 注意 只是它本身被限定 它所指向的对象就不保证被限定为const 所以它实际应返回 int* const
根据C++标准 指向const对象的指针不能给指向非const对象的指针初始化和赋值 而你指定的返回类型都为int* 即非const指针 函数返回时要用实际被返回的内容初始化返回值 这里问题就出来了 前者实际需要返回指向const对象的指针 而你指定了返回类型为指向非const对象的指针 这里就违背了C++标准 而后者实际返回的指针本身为const 但它所指向的对象为非const 所以它可以初始化返回值..
相关文章推荐
- 返回一个整数数组中最大子数组的和
- Android 返回倒序的数组
- 返回一个整数数组中最大子数组的和Ⅱ
- 函数返回数组
- [前端] jquery方法 遍历返回的对象数组
- 方法重载|返回数组|out/ref|自己写tryparse
- 关于函数返回值为数组的时候的问题解析
- C和指针之函数之在数组中找特定元素并返回指向该位置的指针
- [转]返回不重复的元素数组以及判断字符串在数组中存在
- 返回一个二维整数数组中最大联通子数组的和
- m个人的成绩放在score数组中,利用fun函数返回低于平均分得人数,降低于平均分得人成绩放在below中
- 读取WebService返回的数组
- 返回一个二维整数数组最大联通子数组的和(思路)
- 返回数组某个元素的值和地址
- 举一个nspredicate来过滤array的例子,给你一个数字组成的NSArray,写一个predicate,将返回数组中的偶数。
- 返回一个二维整数数组中最大联通子数组的和
- 最保险的函数间数组作为参数值传递与返回方法,用memcpy函数!
- c++函数内部可以返回函数内部定义的指针 但是不能返回函数内部定义的数组
- PHP next()移动数组内部指针到下一个元素的位置,并返回该元素 prev()
- 返回一个二维整数数组中最大联通子数组的和