我的CPP之路

路漫漫其修远兮
随笔 - 42, 文章 - 0, 评论 - 16, 引用 - 0
数据加载中……

const小记_1

众所周知,const可保证被修饰的变量只读,不被修改。
就像const int i=0; 如果再来i=1的话编译器就会报错。
但是,如果在函数的参数中使用const就要小心了,千万别以为“仅仅”用const参数就可以保证传递的参数不被修改。代码如下:

#include <iostream>

void changeInt(const int *);

int main() {
    
int i=0*pi=&i; //const int i=0, *pi=&i;
    std::cout << "i=" << i << std::endl;
    ::changeInt(pi);
    std::cout 
<< "i=" << i << std::endl;

    
return 0;
}


void changeInt(const int *pci) {
    
*(int *)pci = 1;
}


运行结果如下:
i=0;
i=1;

呵呵,i本来就不是const的,用const修饰参数无法保证非const变量的安全,i被改了。
要保证不被修改还是要把变量修饰为const,把main()中第一行改为注释的内容,再编译运行,得如下结果:
i=0;
i=0;

const起作用了。

以上代码在G++ 3.4.5 中编译通过。

恶搞一下:
以下代码会有什么结果??
const int i=0*pi=&i;
*((int *)pi) = 1;
还是G++ 3.4.5,编译通过,没错,但是运行的时候windows xp弹出错误对话框,嘿嘿~~

posted on 2008-03-18 19:18 yanvenhom 阅读(283) 评论(0)  编辑 收藏 引用 所属分类: C/C++


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理