c++ - 如何从 C++ 标准推断数组 [] 的优先级高于指针?

标签 c++ arrays language-lawyer grammar declaration

我知道像这样的声明

int* a[5];
声明 a作为指向 int 的 5 个指针的数组.但是我如何仅通过使用 C++ 标准来推断出这一点?

最佳答案

看看C++的语法就知道了。

ptr-declarator:
    noptr-declarator
    ptr-operator ptr-declarator
noptr-declarator:
    declarator-id attribute-specifier-seqopt
    noptr-declarator parameters-and-qualifiers
    noptr-declarator [ constant-expressionopt] attribute-specifier-seqopt
    ( ptr-declarator )
ptr-operator:
    * attribute-specifier-seqopt cv-qualifier-seqopt
    & attribute-specifier-seqopt
    && attribute-specifier-seqopt
    nested-name-specifier * attribute-specifier-seqopt cv-qualifier-seqopt
因此这个声明
int* a[5];
可以写成
int ( * ( ( a )[5] ) );
( ( a )[5] )是一个 noptr 声明符和 ( * ( ( a )[5] ) )是 ptr-operator ptr-declarator。
一个指向 5 个整数数组的指针的声明看起来像
int ( *a )[5];

关于c++ - 如何从 C++ 标准推断数组 [] 的优先级高于指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67257983/

相关文章:

javascript - 获取最接近的数组数

c++ - 如何更好地检查两个 char 变量是否在某些值集中?

c++ - 如何获取存储在 hpp 头文件中的相对或绝对文件路径,该路径可以在任何系统中使用?

c++ - 是否有一个 GNU C 编译器选项可以生成运行速度比默认设置更快但精度更低的浮点程序?

c# - MarshalAsAttribute 字符串数组

c++ - 为什么将括号与默认构造函数一起使用会导致创建变量?

c++ - 通过基类指针获取子类类型

Javascript数组拼接导致内存不足异常?

c - 退出函数的 noreturn 属性是否必要?

c++ - 如果类包含基类的成员,编译器能否利用空基优化?