关闭

再谈const: 用const 修饰函数的返回值

5849人阅读 评论(0) 收藏 举报
分类:

若函数的返回值是指针,且用const修饰,则函数返回值指向的内容是常数,不可被修改,此返回值仅能赋值给const修饰的相同类型的指针。如:
1  const int * f1(){
2      int * p;
3      p = new int;
4      *p = 1;
5     return p;
6  }

7  int main(){
8     const int * p1;
9     p1 = f1();
10    return 0;
11 }
若第8行改为int *p1;则编译时报错:“[8] error: invalid conversion from 'const int*' to 'int*'” (编译器code::block);

若主函数改为:
7  int main(){
8     const int * p1;
9     p1 = f1();
10    *p1 = 2;
11    return 0;
12 }
则编译时报错:"[10] error: assignment of read-only location '* p1'"  (编译器code::block);

如果函数返回值是数值(by value),因C++中,返回值会被复制到外部临时的存储单元中,故const 修饰,中没有任何价值的。例:不要把函数int fun1() 写成const int func1()。
同理不要把函数A GetA(void) 写成const A GetA(void),其中A 为用户自定义的数据类型。

如果返回值是对象,将函数A fun2() 改写为const A & fun2()的确能提高效率。但此要注意,要确定函数究竟是想返回一个对象的“copy”,还是仅返回对象的“别名”即可,否则程序会出错。

3
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    通知栏
    已修改面向对象课程的内容纲要,请各位同学更新!2017.5.25
    课件下载
    4.26日的实验课,做实验七,调试课本p276 第7.7节中的例程 ,请提前准备程序。
    2017/05/02


    【计科 15 实验 安排】 4-11周, 二教北区603, 周三 第7,8节, 共8次)
    Info
    spaces.live、blog.sina、wordpress.com .... ...
    个人资料
    • 访问:177519次
    • 积分:2954
    • 等级:
    • 排名:第11951名
    • 原创:112篇
    • 转载:31篇
    • 译文:3篇
    • 评论:23条
    最新评论