为什么它是一个常量指针而不是指向常量指针
Why it is a const pointer rather than pointer to const?
在C++入门书中,有一个关于类型别名的解释:
typedef char *pstring;
const pstring cstr = 0; // cstr is a constant pointer to char
他们说以下是一种错误的解释:
const char *cstr = 0;
但是,将 typedef 别名替换为其原始含义对我来说是有意义的。
在没有类型别名的正常情况下,常量指针定义为:
char *const cstr = 0;
为什么它是常量指针而不是常量指针?
谁能用明确的术语解释,因为这本书似乎没有澄清太多。
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而将数字分解回3 + 1
。
const char *
与const pstring
不同的原因非常相似。 const char *
被解释为(const char) *
,即指向常量字符的指针。但const pstring
与const (char *)
相同,即指向字符的常量指针。 pstring
本身就是一个完整的类型,当你这样做时const pstring
它不会拆分char *
以使char
部分恒定。
注意:如果您这样做#define pstring char *
那么const pstring
将与const char *
相同,因为宏(#define
s(仅被视为文本替换。
相关文章:
- 将常量指针引用绑定到非常量指针
- 如何使用数据对象上的常量指针初始化类
- 为什么我收到"从常量指针到指针的转换无效?
- C++/QT:使用指向私有成员的常量指针作为只读数据共享
- 是否可以使用非常量指针调用非常量函数,以及当两个unique_ptrs指向同一个对象时程序的行为方式?
- 为什么C++中没有常量引用,就像常量指针一样?
- 对于非常量指针类型的参数,未调用具有常量指针模板类型参数的功能
- 将常量指针强制转换为非常量
- 带有常量指针的矢量构造函数示例
- 什么是常量指针常量引用类型的参数?(const X* const & p)
- 在多线程函数中返回共享的常量指针会导致计时问题吗?
- 常量指针上的混乱
- 使用 static_cast 时指向常量指针的原因
- 如何在C++中定义常量指针数组?
- 测试此指针的常量指针性质
- 当常量指针用作函数的参数时
- C++ - 无法将顶部常量指针分配给另一个非常量指针
- 在不同类型之间转换常量指针
- 解构常量指针?
- 为什么 std::vector<>::const_reference 可以转换为非常量指针?