c 语言 const 引用,c – 何时在函数args中使用const和const引用?

本文探讨了在C++中如何选择使用const引用、指针或值作为函数参数。主要关注风格、功能性和效率。对于不可修改的对象,推荐使用const引用,因为它们不会引起不必要的拷贝。如果需要接受null,则必须使用指针。对于可选参数,const指针和非const指针都可以,但默认值取决于用例。同时,const值参数仅暴露实现细节。文章还提醒开发者,选择应基于类型是否易于复制以及函数是否需要复制参数。
摘要由CSDN通过智能技术生成

不幸的是,询问是否添加const是错误的问题.

将非const ref与传递非const指针进行比较

void modifies(T &param);

void modifies(T *param);

这种情况主要是关于风格:你想让呼叫看起来像呼叫(obj)或呼叫(& obj)?但是,差异有两点重要.如果您希望能够传递null,则必须使用指针.如果你正在重载运算符,则不能使用指针.

将const ref与值进行比较

void doesnt_modify(T const &param);

void doesnt_modify(T param);

这是一个有趣的案例.经验法则是“便宜复制”类型是通过值传递的 – 这些通常是小类型(但并非总是) – 而其他类型则由const ref传递.但是,如果你需要在你的函数中复制,你就是should pass by value.(是的,这暴露了一些实现细节.C’est le C.)

将const指针与非修改加过载进行比较

void optional(T const *param=0);

// vs

void optional();

void optional(T const &param); // or optional(T param)

这与上面的非修改情况有关,除了传递参数是可选的.这三种情况之间的差异最小,因此请选择最适合您生活的方式.当然,非const指针的默认值取决于您.

Const by value是一个实现细节

void f(T);

void f(T const);

这些声明实际上是完全相同的功能!当传递值时,const纯粹是一个实现细节. Try it out:

void f(int);

void f(int const) {/*implements above function, not an overload*/}

typedef void C(int const);

typedef void NC(int);

NC *nc = &f; // nc is a function pointer

C *c = nc; // C and NC are identical types

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值