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

时间:2017-11-13 09:48:54

标签: c++ c++11 pointers const using

这里,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类型别名?

3 个答案:

答案 0 :(得分:6)

const intptr ptr相当于int * const ptr - const指向非const int的指针,而不是const int * ptr - 指向const int的非const指针。

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

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

答案 1 :(得分:2)

请注意,对于const intptrconstintptr上的顶级限定符。因此,const符合指针本身,然后const intptr表示int* const(即指向非const const的{​​{1}}指针,而非int {1}}(即指向const int* const的非const指针。

答案 2 :(得分:1)

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

这意味着const int* ptr可以被重写为int const* ptr const intptr ptr相当于intptr const ptr int *const ptr