我正在使用 c++ 文件并遇到以下行:
tmp.sort(Hash::pairval, printPair, (void *)(tmp.bitSize()));
我最不确定 (void *) 是什么意思。bitsize() 是一个函数,我之前听说过传递函数指针这个术语。就是这样吗?
我知道 :: 通常是范围解析运算符,我在 .cpp/.h 对象类型文件中看到过。我相信这里的目的是相同的,声明pairval 是在Hash 中找到的。
谢谢
我正在使用 c++ 文件并遇到以下行:
tmp.sort(Hash::pairval, printPair, (void *)(tmp.bitSize()));
我最不确定 (void *) 是什么意思。bitsize() 是一个函数,我之前听说过传递函数指针这个术语。就是这样吗?
我知道 :: 通常是范围解析运算符,我在 .cpp/.h 对象类型文件中看到过。我相信这里的目的是相同的,声明pairval 是在Hash 中找到的。
谢谢
我最不确定 (void *) 是什么意思。bitsize() 是一个函数,我之前听说过传递函数指针这个术语。就是这样吗?
没有。注意括号,tmp.bitSize()
是一个函数调用表达式,被调用并返回一个值。因此 - 这里不涉及函数指针。
然后将返回值转换为指向 void 的指针类型(即包罗万象的“指向某物的指针”类型),以便传递给需要这种指针的函数。
为什么地球上有人会将位大小(看起来像一个数字)转换为指针,我不知道。这介于可疑和不正确之间。
阅读C++ 中的强制转换。void*
由于严格的别名规则,不鼓励使用 C 风格的强制转换,并且强制转换为很少有用且通常很危险。
知道 :: 通常是范围解析运算符,我在 .cpp/.h 对象类型文件中看到过。我相信这里的目的是相同的,声明pairval 是在Hash 中找到的。
这是正确的。
(void *) 只是将 tmp.bitSize() 的返回值转换为 void 指针类型。强制转换是 C++ 和 c 中非常常见的操作。
Hash::pair
很可能是对 class 的静态成员的调用Hash
。
该(void*)
部分是一个强制转换为 void 指针,tmp.bitSize()
它最有可能返回某种值。所以没有函数指针。