- 论坛徽章:
- 0
|
按C++ Primer上的说法, 这是很多人最开始碰到时都会答错的问题. 我也是的.
其实是这样子的, 错误的原因就在于简单地将typedef当成宏替换了. 即:
typedef char *pstr;
const pstr p2 = string; --> const char * p2 = string;
如果这样来看, 那么就是说此时指向的是常量, 但是实际上并不是这样, 并不是简单地替换, 此处的const修饰的是p2, 也就是说这个指针为常量, 它不能变.
那么为什么此处修饰的是p2呢?
按照标准来说typedef虽然不引入一个新的类型, 但是此时可以将typedef char * pstr的 pstr看成是char*的一个整体. 此时定义
pstr p1, p2; 那么这两个都为char*类型. (其实不规范地说就可以将pstr看成是一种类型, 不过这种类型为char*).
然后对于你上面的pstr p2来说, p2为一个char*类型, 也就是一个指针类型. 然后你再在前面加上一个const来修饰它, 也就是说此时修饰的是这个指针类型, 即const修饰的是(char*)这个整体, 所以说此时的p2本身看成是一个常量.
如果你想实现你之前想要的那种功能就这样:
typedef const char* cpstr;
cpstr p2 = string;
p2++;
不知道我说清楚没? 如果不清楚, 大家再交流! |
|