[英]I need some help regarding §8/5 in the spec
§8/ 5:
trailing-return-type中的可选attribute-specifier-seq属于指示的返回类型。 trailing-return-type中的type-id包括尽可能长的abstract-declarator序列。 [注意:这解决了数组和函数声明符的模糊绑定。 [例如:
auto f()->int(*)[4]; // function returning a pointer to array[4] of int // not function returning array[4] of pointer to int
- 末端示例] - 尾注]
“ trailing-return-type中的type-id ”对我来说没有意义,只是因为trailing-return-type根据语法不包含type-id 。
我也不理解数组和函数声明的“模糊绑定”。 据我所知
auto f() -> int*[4]; // function returning an array of 4 pointers to int
auto f() -> int(*)[4]; // function returning a pointer to an array of 4 ints
int *f();
声明一个函数()
返回指向int
指针。
int *f()[4];
声明一个函数()
返回4个指针到int
数组。 请注意,这是不正确的。
int (*f())[4];
声明一个函数()
返回指向4 int
数组的指针。
现在,在
auto f() -> int(*)[4]
// ^^^^^^^^^^^^^---
规则解析的是[4]
是否是trailing-return-type的一部分,因此是函数声明符的一部分。 如果[4]
是trailing-return-type的一部分 ,那么上面的声明声明了一个函数()
返回指向4 int
数组的指针。
如果没有,则[4]
将形成一个不属于函数声明符的数组声明符,并且该解析将由[dcl.array] / p1管理:
在
TD
的声明中,D
表格D1 [ constant-expression_opt ] attribute-specifier-seq_opt
并且声明
T D1
中的标识符类型是“ derived-declarator-type-listT
”[...,if]常量表达式的值是N
,[...]D
的标识符的类型是“N
T
derived-declarator-type-list数组”。
并且因为auto f()-> int (*)
声明f
为“函数()
返回指向int
函数”,替换告诉我们这将声明一个函数返回一个4指针到int
的数组,就像int *f()[4];
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.