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;
}
惡搞一下:
以下代碼會有什么結果??
const int i=0, *pi=&i;
*((int *)pi) = 1;
還是G++ 3.4.5,編譯通過,沒錯,但是運行的時候windows xp彈出錯誤對話框,嘿嘿~~
就像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起作用了。
惡搞一下:
以下代碼會有什么結果??
const int i=0, *pi=&i;
*((int *)pi) = 1;
posted on 2008-03-18 19:18 yanvenhom 閱讀(307) 評論(0) 編輯 收藏 引用 所屬分類: C/C++

