gpt4 book ai didi

c++ - 如何阅读复杂的类型?

转载 作者:行者123 更新时间:2023-12-05 09:04:32 31 4
gpt4 key购买 nike

我知道使用类型别名和 typedef 可以使代码更具可读性、不易出错且易于修改。但是在这个例子中我想知道这个复杂的类型:

#include <iostream>
#include <typeinfo>

char ( * (* x() )[] )();

int main(){

std::cout << typeid(x).name() << std::endl;
}

根据经验,我从内到外阅读它,但我发现它太困惑了。

谁能帮我读一下?

GCC 的输出:

FPA_PFcvEvE

最佳答案

char        - returning a char                         *
(* - of pointers to *---v ^
(* - returning a pointer to *---v ^ v ^
x() - a function `x` --^ v ^ v ^
)[] - an array *---^ v ^
)(); - functions *--^

并查看 https://itanium-cxx-abi.github.io/cxx-abi/abi.html#mangle.array-type ,比如:

FPA_PFcvEvE
^ - function (
^ - returning pointer
^ - to an array [
>< - with no dimension expression
^ - separator, end of array ]
^ - of pointers
^ - to functions (
^ - returning char
^ - (void) functions that take no arguments
^ - separator, end of function )
^ - (void) it's a function that takes on arguments
^ - separator, end of function )

例子:

#include <iostream>

char return_a() { return 'a'; }
char return_b() { return 'b'; }
char return_c() { return 'c'; }

char (* array_of_funcs_that_return_char[3])() = {
return_a,
return_b,
return_c,
};

char (* (*pointer_to_array_of_funcs_that_return_char)[3])() = &array_of_funcs_that_return_char;

char ( * (* x() )[3] )() {
return pointer_to_array_of_funcs_that_return_char;
}

int main() {
std::cout << (*x())[1](); // outputs 'b'
}

关于c++ - 如何阅读复杂的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68509578/

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