在C ++ Primer书中,对类型别名的解释如下:
typedef char *pstring;
const pstring cstr = 0; // cstr is a constant pointer to char
他们说以下是错误的解释:
const char *cstr = 0;
但是,对我而言,用其原始含义替换typedef别名。
在没有类型别名的正常情况下,常量指针定义为:
char *const cstr = 0;
为什么它是常量指针而不是const指针?
任何人都可以用清晰的措词来解释,因为这本书似乎并没有太多说明。
答案 0 :(得分:2)
2 * 3 + 1
是7。但是,如果我先做int i = 3 + 1;
然后2 * i
又得到8,那怎么办?变量不应该用其原始含义替换吗?
这是因为2 * 3 + 1
被解释为(2 * 3) + 1
,而2 * i
与2 * (3 + 1)
相同。这些意味着不同的事情,并得出不同的数字。给3 + 1
命名时,使用该名称不会将数字分解成3 + 1
以便仅乘以3。
const char *
与const pstring
不同的原因非常相似。 const char *
被解释为(const char) *
,即指向常量char的指针。但是const pstring
与const (char *)
相同,即指向char的常量指针。 pstring
本身就是一个完整的类型,当您进行const pstring
时,它不会拆分char *
来使char
部分成为常量。
注意:如果您做了#define pstring char *
,那么const pstring
将与const char *
相同,因为只处理了宏(#define
s)作为文本替换。