T D[N] 是否总是声明数组类型的对象?

2024-02-01

我很困惑[dcl.数组]/1 http://eel.is/c++draft/dcl.array#1:

在声明 T D 中,其中 D 的形式为

          D1 [ constant-expressionopt ] attribute-specifier-seqopt

声明 T D1 中标识符的类型是“派生声明符类型列表T”,则D的标识符类型为数组类型; ...

考虑一下声明:

int (*p)[42];

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

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


这是标准措辞的一个错误。当然,int (*p)[42];不是数组类型,但满足语法[dcl.数组]/1 http://eel.is/c++draft/dcl.array#1(并且不满足前面的语法[dcl.含义]/5 http://eel.is/c++draft/dcl.meaning#5, [dcl.含义]/6 http://eel.is/c++draft/dcl.meaning#6, [dcl.ptr]/1 http://eel.is/c++draft/dcl.ptr#1, [dcl.ref]/1 http://eel.is/c++draft/dcl.ref#1 or [dcl.mptr]/1 http://eel.is/c++draft/dcl.mptr#1),所以 [dcl.array]/1 应该适用。

我已经发布了一个社论问题 https://github.com/cplusplus/draft/issues/2175.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

T D[N] 是否总是声明数组类型的对象? 的相关文章

随机推荐