使用typedef时,为什么非const指针被视为const?
typedef char* c; const c ptr1 = "pointer"; ++ptr1; /// error const char* ptr2 = "pointer"; ++ptr2; /// runs fine
现在ptr1
应该是const char*
类型,因此是非const指针,那么为什么它被视为常量指针?
他们不一样。
第一个指定const-pointer-to-char,第二个指向const-char指针。
尝试从右到左阅读:
const char *p; // p is a pointer to char which is const char const *p; // p is a pointer to const char (same as previous) char * const p; // p is a const pointer to char char const * const p; // p is a const pointer to const char
通过使用typedef typedef char* c
您将“指向char的指针”包含在一个别名c
:
const cp; // p is a const [c] --> p is a const [pointer to char]
补充说明:
Typedef不像宏那样就地扩展,即
const cp;
真的变成了
const [char*] p;
它不会成为
const char* p; // Nope.
不要像脑中的宏一样扩展它,使用typedef,你将char
和*
绑定在一起并形成一个primefaces。
ptr1
是一个const (char *)
,意思是指针本身是一个const,而ptr2
是一个(const char) *
,意味着指针的目标是const。
它与c内部组合的方式有关。 一个typedef不像一个宏,它不仅仅是替代它。如果你在它中使用pus括号,它将会是这样的。
const (char*) ptr1 = "pointer"; (const char)* ptr2 = "pointer";
写得像:
typedef char* c; c const ptr1 = "pointer"; ++ptr1; /// error char const* ptr2 = "pointer"; ++ptr2; /// runs fine
使差异更明显,这应该与您的示例相同