使用类型别名不能与"const"指针一起使用

msc*_*msc 3 c++ pointers using const c++11

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

#include <iostream>

int main() 
{    
    const int i = 5;
    const int* ptr = &i;
}
Run Code Online (Sandbox Code Playgroud)

它工作正常.

但是,如果我使用(类型别名),如:

#include <iostream>

using intptr = int*;

int main() {    
    const int i = 5;
    const intptr ptr = &i;
}
Run Code Online (Sandbox Code Playgroud)

GCC编译器出错.[现场演示]

为什么指针不适用于usingType别名?

use*_*670 6

const intptr ptr是一个等效的int * const ptr- const指向非const int的指针,而不是const int * ptr指向const int的非const指针.

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

const ptr<int> p; // const pointer to non-const int
ptr<const int> p; // non-const pointer to const int
Run Code Online (Sandbox Code Playgroud)