gpt4 book ai didi

c++ - 我如何使用 §8.3.1 和 §8.3.4 推断像 '[]' 这样的后缀声明符运算符比像 '*' 这样的前缀运算符绑定(bind)得更紧密?

转载 作者:行者123 更新时间:2023-11-30 02:42:25 24 4
gpt4 key购买 nike

考虑 §8.2/3 示例中的表达式 new (int(*[x]));:

#include <cstddef>
char *p;
void *operator new(std::size_t, int);
void foo() {
const int x = 63;
new (int(*p)) int; // new-placement expression
new (int(*[x])); // new type-id
}

我知道这个表达式分配了一个由 63 个指针组成的数组,指向自由存储区中的 int。从§8.3/6我们可以去掉int(*[x])中的括号,得到表达式new (int*[x]);。但是我在确定类型 int*[x] 是指向 int 的 63 个指针的数组而不是指向 63 个 的数组的指针时遇到问题int 使用段落 §8.3.1 和 §8.3.4。

最佳答案

8/4 的语法图中,ptr-declaratornoptr-declarator 之间的相互作用中隐含了优先级。根据语法,*id[x] 不能解析为 *id 后跟 [x](方括号前的声明符必须是noptr-declarator),但仅作为 * 后跟 id[x]。然后,此读数与 8.3.1 指针 的模式相匹配,而不是 8.3.4 数组 的模式。

关于c++ - 我如何使用 §8.3.1 和 §8.3.4 推断像 '[]' 这样的后缀声明符运算符比像 '*' 这样的前缀运算符绑定(bind)得更紧密?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27077194/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com