C语言中const的使用

CONST AND PASS-BY-VALUE
使用一个常量前缀(const)可以避免传址变量的修改:

void f(const string & s);

一些开发者即使针对传值变量也用 const :

void f(const int n); /*n is passed by value, why const?*/

const 是否真的必要? 不, 不需要. 记住, 在你使用传值变量的时候, 调用函数不会修改变量值而仅仅复制它. 进一步讲, 根据 C++ 标准, Top-level cv-qualification 前缀是被忽略的. 让我们解释这个术语: "cv-qualification" 指常量和非稳定. "Top-level" 意味着参数不是一个组合或者非完整的类型, 比如: 不是指针, 引用或者数组. 这样:

void f(int const param1);

还是作为下列方式对待:

void f(int param1);

为此, 传递一个类型为 'const int' 类型的参数给 void f(int param1); 是允许的:

void f(int n); /*non-const parameter*/
int main()
{
f(1); /*const int; fine*/
}

相反, 下列对于常量的使用则有影响:

void f(int *p1);
void f(const int *p2);

这里, 常量被用于一个组合类型, 称之为 int *. 这样, 不能传递类型为"一个指向常量整数的指针" 给第一个函数 f().

void f(int *p1); /*non const version*/
int n=0;
const int *p=&n;
f(p); /*error, cannot convert 'const int *' to 'int *'*/

作为一个规则, 如果变量以传值方式传递或者返回不能声明为常量, 只有针对组合类型使用常量类型.
-----------
Danny Kalev 

http://www3.ccw.com.cn/club/essence/200104/869.htm
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值