关于const的问题?30分
在C++中 这条语句 extern const int &ri;是一个声明还是定义,为什么?还有引用的时候不是必须要初始化,和一个对象绑定一下?
[解决办法]
定义嘛,
如果是const必须在定义的时候赋值,否则你就没机会赋值了
[解决办法]
具体可以参看我的BLOG,上面有关于CONST的用法
http://blog.csdn.net/caocheng8230/posts/1464574.aspx
const原则:在C++中最好趋向与使用const来修饰它前面的那个类型。
如:const int a;和int const b;中,虽然两种具有相同的意义,但是最好利用后面的那种情况,后面的更加可读,因为:int const我们可以很清楚地看到const是修饰int,而前面的那种方法中,我们就不那么轻易知道到底const 的具体涵义。由后面的那种方法我们可以知道const指一个恒定的整形。Int *const b,指的是一个恒定的指针b,这个指针指向一个整型,所以这个指针的内容可以改变,但是它的指针值也就是b的值不能变,相应的int const *b,指的是一个指向恒定整型内容的指针b,也就是说这个b的内容可以变,但是开始的b所指向的地址中的内容不能在程序当中通过b来改变。
volatile对上面的原则也适用。
[解决办法]
extern声明
关于const:
1。对于指针的讨论比较多
const int* p = &ci1;
p = &ci2;
这是指向一个const对象的指针,而p是个指针变量,可以指向ci1,也可以变指向的到ci2
把const写在*之后那就是个常量指针了,p是指针常量,定义时初始化,以后再不能改变指向了
int * const p = &i1;
p = &i2; //err
二者结合的情况
const int* const p = &ci3;
2。涉及typedef的情况
先说一种意见
定义常量可以 const int ci1 = 0;
可以 int const ci2 = 0;
typedef char* C;
const C p = &ch;
这个p是什么呢,是const char* p还是char* const p;
是后者,
原因:const C p中C是个类型,const是修饰p的
所以基于这点,个人建议写const量定义的时候,用int const ci2 = 0;的形式,显式说明const是修饰ci2的
所以,
typedef char* C;
C const p = &ch;