gpt4 book ai didi

c++ - 这是什么类型的typedef?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:25:25 25 4
gpt4 key购买 nike

我在查看的一些我不理解的代码中遇到了这个声明。

typedef struct foo_* foo;

int main(int argc, char** argv)
{
foo a = nullptr; // Ok. foo is a synonym for 'foo_*'
foo_* b = a; // Ok! somehow foo_* is a valid type, but where is it defined?

return 0;
}

foo_ 类型之前没有定义或声明(这是一个完整的编译示例)。据我了解,typedef 为已经存在的类型提供同义词,并且在声明或定义之前不能使用类型。由于 foo_ 之前未声明或定义,这是什么的 typedef 以及它如何合法?

更新:

有人说这没问题,因为 typedef 中的 struct foo_* 被假定为内联前向声明,而实际尝试使用 foo_ 将失败。但我刚刚在 VS2012 上对此进行了测试,并且引用此类型对我来说编译得很好。

最佳答案

Since foo_ is not previously declared or defined what is this a typedef of and how is that legal?

一旦您想对它做任何有用的事情,它就会提示。前向声明的指针是可以的,但取消引用需要完整的类型。

typedef struct foo_* foo;

int main()
{
foo bar;
foo_ baz = *bar;
}

因编译错误而失败:

main.cpp: In function 'int main()':
main.cpp:7:10: error: variable 'foo_ baz' has initializer but incomplete type
foo_ baz = *bar;
^

关于c++ - 这是什么类型的typedef?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36517101/

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