• 5238阅读
  • 0回复

【原创】C++ Review Const [复制链接]

上一主题 下一主题
离线风中纸页
 
只看楼主 倒序阅读 楼主  发表于: 2006-02-06
干什么用的?
保持某个变量为常量。

通常是这样声明的:
const int a = 10; //在声明的同时必须初始化,否则以后就不能修改(初始化)了。

const需要仔细看看的就是指针常量的声明和使用。

可以有哪几种结构呢?

1,const TYPE *foo
这样声明了一个TYPE类型的指针常量,可以指向任何TYPE类型的变量(可以修改),但不可以通过*foo来修改指向变量的内容。
例如:

错误例子:
#include <iostream>
using namespace std;

int main(void){

int a = 10;
int b = 20;
const int * foo = &a;



*foo = 100; //这里会有l-value specifies const object的error,说明*foo不能修改变量内容

cout<<"a="<<a<<endl;
cout<<"foo="<<*foo<<endl;

return 0;
}

正确的例子:
#include <iostream>
using namespace std;

int main(void){

int a = 10;
int b = 20;
const int * foo = &a;

foo = &b; //可以指向其他变量,但同样不能修改*foo指向的变量b的值。

cout<<"a="<<a<<endl;
cout<<"foo="<<*foo<<endl;

return 0;
}


2,TYPE * const foo
这样声明了一个TYPE类型的常量指针,foo在声明的时候要指定所指向的变量,指定以后就不可以修改,但可以修改指定变量的值。
把上面的正确例子修改一下:
#include <iostream>
using namespace std;

int main(void){

int a = 10;
int b = 20;
int * const foo = &a;

foo = &b; //啊噢,不能修改了。

cout<<"a="<<a<<endl;
cout<<"foo="<<*foo<<endl;

return 0;
}

再改正一下:

#include <iostream>
using namespace std;

int main(void){

int a = 10;
int b = 20;
int * const foo = &a;

*foo = 200; //这下子好了。哈~

cout<<"a="<<a<<endl;
cout<<"foo="<<*foo<<endl;

return 0;
}


3,const TYPE * const foo
这个就不细说了。什么都不能动。都是“死”的。

小结一下,const 如果在TYPE *前,表示所指向内容不能修改,但是指向什么变量是可以修改的;
const 如果在TYPE *后,表示指向什么变量是不能修改的,但是指向变量的内容是不能修改的。
把问题先交给google,再交给你的朋友。谢谢。
快速回复
限100 字节
 
上一个 下一个