C++中安全地写只读函数的形参

        本篇博客我简单地总结两条C++中安全地写只读函数的形参的办法。

        我认为的只读函数:除了该函数本身的一些功能实现代码外,不含有任何对形参do事情的代码的函数,也即只对形参进行访问(读取)操作的函数,我把该类型的函数称之为只读函数。

一、对于非指针类型的变量(包括int/float/double等内置数据类型以及self-define的自定义类型)

        用:const typeName& variableName 来do传参

        (其实,本质上引用也是用指针常量来写的,因此上面这样传参就是传的常量指针常量了,非常地安全,妈妈再也不怕我在只读函数的函数体里面修改这个形参的值了!)

请看以下的例子代码:

int a = 1; double b = 2.1;
double add_a_and_b(const int& a,const double& b){//内置类型do只读函数的形参
    return a + b;
}
cout << add_a_and_b(a,b) << endl;//result = 3.1
class Person{
public:
    int m_Age;
public:
    Person(const int& age):m_Age(age){}//内置类型do只读函数的形参
    Person(const Person& p){//自定义类型do只读函数的形参
     this->m_Age = p.m_Age;
    }
}

二、对于指针类型的变量(包括int*/float*/double*等内置的指针数据类型以及self-define的自定义的指针类型)

        用:const pointerTypeName* const pointerName 来do传参

        (上面这样传参就是传的常量指针常量了,非常地安全,妈妈再也不怕我在只读函数的函数体里面修改这个形参的值了!)

请看以下的例子代码: 

int a = 1;double b = 2.1;
int* pa = &a; double* pb = &b;
double add_pa_and_pb(const int* const pa,const double* const pb){
    return *a + *b;//内置指针类型do只读函数的形参
}
cout << add_pa_and_pb(pa,pb) << endl;//result = 3.1
struct TreeNode {
    int val;
    TreeNode* left;
    TreeNode* right;
    TreeNode():val(0),left(nullptr),right(nullptr){}
    TreeNode(int v) :val(v), left(nullptr), right(nullptr) {}
};
//打印输出二叉树节点值的函数
void myPrint(const TreeNode* const cur){//self-define指针类型do只读函数的形参
    cout << cur->val << endl;
}

如果说有小伙伴对于常量指针,指针常量的知识不理解的话,可以翻阅我之前总结的学习笔记!

补充说明:

        当然,对于内置的数据类型来说,你不用const修饰,直接用typeName variableName的方式传进去只读函数中也可以,也不至于降低你代码的效率,但是对于self-define自定义的类型的变量/对象来说,如果你简简单单地用 className variableName传参,将会涉及到该class的构造和析构函数的调用。如果你还用了多态来写代码时,那么只读函数中单单是传个形参都要涉及大量的类的构造和析构函数的调用,这样会大大降低你程序的运行成本和效率!因此,

对于内置的数据类型:

        你大可以只用typeName variableName的方式传参进只读函数中。

对于self-define自定义的数据类型:

        你就必须要用const pointerTypeName* const pointerName或者const typeName& variableName来传参进只读函数了!

本篇博客总结的知识点部分来自于《Effective C++》term20

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fanfan21ya

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值