zoukankan      html  css  js  c++  java
  • 使用const 提高函数的健壮性

    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();

  • 相关阅读:
    Balanced Substring
    解决vscode可以编译通过c++项目,但头文件有红色波浪线的问题
    Poj2299---Ultra-QuickSort
    树状数组
    内置函数
    函数式编程,尾调用,map函数,filter函数,reduce函数
    函数作用域和匿名函数
    函数参数/局部变量与全局变量/前向引用(函数即变量)
    函数的定义
    字符串格式化
  • 原文地址:https://www.cnblogs.com/wiessharling/p/3260816.html
Copyright © 2011-2022 走看看