使用类型别名不适用于 "const" 指针

using type alias doesn't work with "const" pointer

这里,const指针保存着const变量的地址。喜欢 :

#include <iostream>

int main() 
{    
    const int i = 5;
    const int* ptr = &i;
}

一切正常。

但是,如果我像这样使用 using (Type alias)

#include <iostream>

using intptr = int*;

int main() {    
    const int i = 5;
    const intptr ptr = &i;
}

GCC 编译器报错。 [Live demo]

为什么指针不适用于 using 类型别名?

const intptr ptr 等同于 int * const ptr - 指向非常量 int 的 const 指针,而不是 const int * ptr - 指向 const int 的非常量指针。

如果您发现指针声明的这种从右到左的阅读顺序令人困惑,您可以使用 Straight declarations 库,它提供别名模板来声明具有从左到右阅读顺序的指针类型:

const ptr<int> p; // const pointer to non-const int
ptr<const int> p; // non-const pointer to const int

请注意,对于 const intptrconstintptr 上的顶级限定符。所以 const 在指针本身上是合格的,那么 const intptr 意味着 int* const (即 const 指向非 const int 的指针),而不是 const int*(即非 const 指向 const int 的指针)。

const 关键字实际上绑定到它左边的单词。值得注意的例外是它可以绑定的唯一单词位于右侧。

这意味着 const int* ptr 可以重写为 int const* ptrconst intptr ptr 等同于 intptr const ptrint *const ptr.