gpt4 book ai didi

c++ - 为什么某些类型(带有数组表示法)在没有 typedef 的情况下不能用作 C 中的返回类型?

转载 作者:行者123 更新时间:2023-12-02 18:45:08 25 4
gpt4 key购买 nike

在摆弄类型语法时,我注意到这是合法的:

typedef int *((* T)[10]);

T fun(){
return 0;
};

int main(int argc, char * argv[]){
//int c = fun(); // (1)
return 0;
}

...如果取消注释 (1),则会收到此类错误消息(GCC/Clang):“错误:无法初始化类型为 'int 的变量',右值类型为'T'(又名'int *((*)[10])')”(到目前为止正常)。但请注意,“aka”指出该类型是 int *((*)[10]) 的别名,而不仅仅是 int ***

但是,如果不使用 typedef 来声明这种类型的函数似乎是不可能的:

int *((*)[10]) fun(){ // The compiler does not approve
return 0;
};

int *((* fun2)[10]) (){ // The compiler does not approve either
return 0;
};

int main(int argc, char * argv[]){
//int c = fun(); // (1)
return 0;
}

...然后我想知道为什么?(问题是针对C语言的,不过貌似C++也是一样的)

最佳答案

这种类型:

typedef int *((* T)[10]);

是一个指向大小为 10 的数组的指针,其成员的类型为 int *。这与 int *** 不同。

对于创建返回此类型的函数,您需要:

int *(*fun())[10] {
return 0;
};

但是使用 typedef 可以让这一点变得更加清晰。

关于c++ - 为什么某些类型(带有数组表示法)在没有 typedef 的情况下不能用作 C 中的返回类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67558052/

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