zoukankan      html  css  js  c++  java
  • 修饰对象再谈const: 用const 修饰函数的返回值

    废话就不多说了,开始。。。

        若函数的返回值是指针,且用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个月吧!项目经理: 那给两个呢?程序员: 1个月吧!
    项目经理: 那100呢?程序员: 1年吧!
    项目经理: 那10000呢?程序员: 那我将永远无法完成任务.

    --------------------------------- 原创文章 By
    修饰和对象
    ---------------------------------

  • 相关阅读:
    后端程序员写的前端js代码模板
    setTimeOut传參数
    IP地址的分类——a,b,c 类是怎样划分的
    适配高分辨率的图片High DPI Images for Variable Pixel Densities
    atitit.提升软件开发效率大的总结O5
    Android Binder总结
    Enable Notepad++ 666 support both SCLEX_FORTRAN and SCLEX_F77
    client怎样调用IBinder接口对象
    文件系统损耗平衡算法
    u-boot支持yaffs映像烧写的补丁
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3111434.html
Copyright © 2011-2022 走看看