首页 > 解决方案 > TD[N] 是否总是声明数组类型的对象?

问题描述

我对[dcl.array]/1感到困惑:

在声明 TD 中,其中 D 具有以下形式

          D1 [常量表达式选择]属性说明符序列选择

且声明T D1 中标识符的类型为“<em>derived-declarator-type-list T”,则D的标识符类型为数组类型;...

考虑声明:

int (*p)[42];

这个声明满足上面描述的语法(并且不满足前面段落描述的语法),所以这个段落应该适用,因此我们得出结论的类型p是数组类型。但是,我们知道pis的类型pointer to array of 42 int是指针类型。

我错过了什么吗?还是pointer to array of 42 int确实是数组类型?

标签: c++arrayslanguage-lawyerdeclaration

解决方案


这是标准措辞的一个错误。当然,int (*p)[42];不是数组类型,但满足[dcl.array]/1中的语法(并且不满足[dcl.meaning]/5 , [dcl.meaning]/6 , [dcl.ptr ]/1[dcl.ref]/1[dcl.mptr]/1),所以 [dcl.array]/1 应该适用。

我发布了一个编辑问题


推荐阅读