C ++ ::双冒号和(void *)

时间:2012-10-22 16:31:42

标签: c++

  

可能重复:
  What does (char *) x or (void *) z mean?

我正在使用c ++文件并遇到以下行:

tmp.sort(Hash::pairval, printPair, (void *)(tmp.bitSize()));

我最不确定(void *)的含义。 bitsize()是一个函数,我之前听过一个传递函数指针的术语。这是什么?

我知道::通常是范围解析运算符,我在.cpp / .h对象类型文件中看到过。我相信它在这里服务于同一目的,说明在哈希中找到了对。

由于

3 个答案:

答案 0 :(得分:0)

(void *)只是将tmp.bitSize()的返回值强制转换为void指针类型。在C ++和c中,Casting是一种非常常见的操作。

答案 1 :(得分:0)

Hash::pair

很可能是对类Hash的静态成员的调用。

(void*)部分是tmp.bitSize()的无效指针转换,很可能返回某种值。所以没有函数指针。

答案 2 :(得分:0)

  

我最不确定(void *)的含义。 bitsize()是一个函数,我之前听过一个传递函数指针的术语。这是什么?

不。注意括号tmp.bitSize()是一个被调用的函数调用表达式并返回一个值。因此 - 这里没有涉及函数指针。

然后将返回值强制转换为指向void的指针类型(即指向某种类型的catch-all“指针”),以便传递给期望这种指针的函数。

为什么在地球上有人会将一个比特大小(看起来像一个数字)转换为指针,我不知道。这介于可疑和不正确之间。

阅读casting in C++。不鼓励使用C风格的演员阵容,因为strict aliasing rule而投射到void*很少有用且常常很危险。

  

知道::通常是范围解析运算符,我在.cpp / .h对象类型文件中看到过。我相信它在这里服务于同一目的,说明在哈希中找到了对。

这是正确的。