在 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的指针?
任何人都可以解释清楚吗,因为这本书似乎并没有阐明太多。
最佳答案
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
) 仅被视为文本替换。
关于c++ - 为什么是const指针而不是指向const的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55366779/