我今天在C ++采访测试中看到一条声明:
int (*(*fb)(int, char*))[2];
我不知道这个声明意味着什么。它看起来很像函数指针,但是第一个星号和方括号破坏了所有内容。
Visual Studiofb
按以下方式解码的类型int[2] * (int, char *) *
,看起来仍然有些神秘。
如果我们简化声明,那么一切看起来就清晰了
int(*(*fa)(int, char*));
int* func(int, char*)
{
return 0;
}
// now we can assign func to fa
fa = func;
有任何想法吗?
fb
是以下签名的函数指针:
int
和char*
int
的类型为int(*)[2]
通常,由于函数指针,数组指针和类似内容的神秘语法,您应该使用typedef或类型别名(新的using
-syntax)使其逐步清晰:
using int2 = int[2];
using int2ptr = int2*;
using fb = int2ptr(int, char*);
另外,可以考虑返回astd::vector
或std::array
;而不是返回数组。您可以考虑std::string
不使用传递char指针,而不是使用函数指针std::function
。所有这些都是“罐子”,因为每种“原始类型”都有其存在的原因,但是原因非常有限。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句