C_C++技巧集
源代码在线查看: 编程技巧 常量const的使用(编译自topica).txt
作者:rick1126
email: rickzhang@sina.com.cn
日期:2001-4-13 6:27:23
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