c – const传播到std ::指针数组

前端之家收集整理的这篇文章主要介绍了c – const传播到std ::指针数组前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
为什么std :: array的数据类型在这里实例化不同
using T = const int *;
std::array<T,4> x = { &a,&b,&c,&d }; // name: class std::array<int const *,4>
x[0] = &c; // OK    : non-constant pointer
*x[0] = c; // Error : constant data

相比这里?

using T = int *;
std::array<const T,&d }; // name: class std::array<int * const,4>
x[0] = &c; // Error : constant pointer
*x[0] = c; // OK    : non-constant data

第二种情况等同于const std :: array< T,4> (常量指向非常数数据).
如果我们直接使用const int *:std :: array< const int *,4>我们得到第一个案例行为.

更确切地说,为什么使用T = int *; std :: array< const T,4&gt ;;相当于std :: array< int * const,4>而不是std :: array< const int *,4>?

解决方法

why is using T = int*; std::array<const T,4>; equivalent to std::array<int*const,4> and not std::array<const int*,4>?

因为const在T,指针本身上是合格的,所以它不是(并且不能)在指针上合格.因此const T表示const指针,而不是指向const的指针.

规则是相同的,无论T是否为指针.

using T = int;   // const T => int const
using T = int*;  // const T => int* const,not int const*
using T = int**; // const T => int** const,neither int* const*,nor int const**

注意第三个例子,如果const在指针对象上是合格的,那么const T应该是int * const *,或者它应该在pointee的指针对象上是合格的,即int const **?

原文链接:https://www.f2er.com/c/119342.html

猜你在找的C&C++相关文章