1、如果输入参数采用“指针传递”,那么加const 修饰可以防止意外地改动该指针指向的内存单元,起到保护的作用。

  例如:void StringCopy(char *strDest, const char *strSrc);

       void OutPutString(const char *str);

2、如果输入参数采用“值传递”,由于函数将自动用实参的拷贝初始化形参,因此即使在函数内部修改了该参数,改变的也只是堆栈上的拷贝而不是实参,所以一般认为不需要用const 修饰。

  对于ADT/UDT的参数而言,像void Func(A a)这样声明的函数注定效率比较低。因为函数体内产生A类型的临时对象用于拷贝参数a,而临时对象的构造、拷贝、析构过程都将消耗时间。

  提高效率的方法:

  一、改为:void Func( A &a);           缺点:函数可能改变实参的值。

  二、改为:void Func( const A &a);

  依次类推,是否有必要将 void Func(const int x) 改成   void Func(const int &x)呢?

完全没有必要。因为基本数据类型的参数不存在构造、析构的过程,而拷贝也非常的快,因此,对于基本数据类型而言,“值传递”和“引用传递”效率几乎相当

3、用const 修饰函数的返回值

  如果给“指针传递”的函数返回值加const 修饰符,那么函数返回值是一种契约性常量,不能被直接修改,并且该返回值只能被赋值给加const修饰的同类型指针(除非强制类型转换)。

例如:const char* GetString(void);

则如下语句将出现编译错误:

  char* str = GetString();

  正确的用法:

const char* str = GetString();

最新文章

  1. nginx+php 在windows下的简单配置安装
  2. ubuntu Chromium 安装 pepperflashplugin
  3. 我的java后端书架
  4. Java 之ThreadLocal 对应C#之ThreadStatic
  5. Promise.race
  6. NYOJ题目74小学生算术
  7. Html5 audio stop
  8. SQL第二课-创建数据表
  9. linux-ln命令
  10. MVC-03 控制器(5)
  11. 【centos6 , 6】linux 查看帮助文档:
  12. celery最佳实践
  13. 【读书笔记】【深入理解ES6】#2-字符串和正则表达式
  14. 【原】Java学习笔记003 - 数据类型
  15. org.springframework.web.context.support.XmlWebApplicationContext.refresh Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreatio
  16. ubantu安全卸载火狐浏览器
  17. html页面转成jsp页面之后样式变化的问题解决方法
  18. Nginx 常用配置
  19. 超简单的gif图制作工具
  20. codeforces 984B Minesweeper

热门文章

  1. (转)jQuery Validate 表单验证
  2. Hadoop 实现对Value倒序排序
  3. 启用DHCP中继代理,实现跨子网服务 - Win 2003 Server
  4. MySQL忘记root密码的解决方案
  5. Eclipse自动生成文档注释
  6. SQL 把数据从一张表更新到另一张表
  7. Andriod手势密码破解
  8. easyui 1.3.3 中combotree post传参问题
  9. Coursera获取中文字幕(如果有的话)
  10. The 500 Most Commonly Used Words in the English Language