|
1
2
这声明“AnimalCreation”用作指向不返回任何值的函数的指针的类型别名,而
声明它用作指向返回void指针的函数的指针的类型别名,即指向不知道其类型的对象的地址。
在…内
函数指针不能是任何东西的子类,所以我不认为代码中的参数是Animal子类。。。相当地
Animal类的子类是该函数返回的对象
假设这也是一个多态类,那么您将能够使用虚拟继承规则调用它的方法。如果要检查函数调用接收的指针,并且不确定它是否是
附带说明:函数指针和void*之间的转换是 不良行为 因为您丢失了有价值的类型信息。 |
|
|
2
2
typedef行是AnimalCreation,定义为 function pointer type 函数foo接受void*参数,并将其转换为AnimalCreation类型(即函数指针类型)。然后它可以通过函数指针调用函数。此调用返回一个void*(根据typedef-第一个括号之前的部分是返回类型,因此是void*),然后通过重新解释cast将其转换为Animal*。 如果从typdef中删除星号,它仍然会声明函数指针类型,但现在返回值将是void而不是void*(即不返回任何内容,而不是指针)。您仍然可以通过函数指针调用函数,但它不会返回任何内容。 总之,这是一个很好的小函数指针教程。 编辑:这段代码似乎在做什么——这是在C++中实现“工厂模式”的一种方式——抽象对象的创建,并将多态基类指针返回到派生类。在void*和函数指针之间进行强制转换,并不是实现这一点的最佳方法,您可以寻找替代方法 here |
|
|
3
0
首先,这是一个相当丑陋的C样式代码。
要解释这一点,请遵循C&C++声明读取:如果将声明作为表达式键入,则将获得其类型。
如果只是
现在
这需要一个
最后,您显示的调用将强制执行未定义行为,因为它传递了指向对象的指针的地址。但是如上所述,
总之,这样的代码很糟糕,作者应该感到很糟糕。您唯一希望看到此类代码的地方是与C样式外部库的互操作性,在这种情况下应该是 非常有记录。 |
|
AstralHex · 矩阵乘法代码工作不正常 1 年前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |