1 typedef char *pstring;
2 const pstring cstr = 0;
3 const pstring *ps ;
书上第二句的注释是cstr是指向char的常量指针,可是第二句不是cstr指向char常量的指针吗,然后后面是=0,不就是把cstr所指的对象的值重置嘛?
第三句希望也能解释一下,谢谢
主要是看const的位置,const在指针前,就是常量指针。不然就是指针常量
第三个相当于定义个指针变量ps
const char * *ps;
第二句其实是将cstr初始化为空,因为在C++中空(NULL)被定义为0;
第三句就是二楼所说的那样;
const pstring cstr = 0;这句相当于 const char* cstr=0;也相当于 char const * cstr=0;
第一点,const在 * 左边,所以是常量指针,即cstr指向的内容是常量,即cstr指向内容无法修改,cstr本身可修改,赋值0是给指针cstr赋值,
在c++中NULL被定义为0或者void*,所以是初始化cstr为空指针。
如果是 char * const cstr=0 ; const在 * 右边,表面这是指针常量,即cstr本身无法修改,其指向内容可以修改。
如果要均无法修改,即指向常量的常指针:const char * const cstr; 或者 char const * const cstr;
const pstring ps ;这句相当于 const char* ps; 这表面ps是个二级指针,表明 (* ps) 所指的值是常量.
其它和上面一样。
在内联函数中、STL或者boost中,尽可能的使用const,因为它限定了你不想改变的量,避免很多调试上的开销。
另为多说点不常用的:mutable关键字声明可以突破const限定,例子就是在const函数中用mutable声明其中的变量使其可变。
不过尽量避免使用吧。
const pstring ps ;这句相当于 const char* * ps(两个*); 这表面ps是个二级指针,表明 (* ps) 所指的值是常量.
其它和上面一样。