C_C++技巧集

源代码在线查看: 编程技巧 常量const的使用(编译自topica).txt

软件大小: 402 K
上传用户: a1102882595
关键词: C_C
下载地址: 免注册下载 普通下载 VIP

相关代码

				作者: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 			

相关资源