2012-01-02 121 views
4

我很抱歉,如果这不是一个足够好的问题(因为我自己的解决方案正常工作,所以我实际上没有问题),但是在这里。
我的意思是,我被带到C上,后来我只学了C++,所以也许我有偏见,但仍然是。在C++中使用正确的方法

在这种特殊情况下,有一个库返回const char*,而另一个库需要void*作为输入。所以如果我想打电话给第一个库的结果,我将需要写

second(const_cast<void*>(static_cast<const void*>(first()))); 

对不对?这是唯一正确的方式,对吧?

+0

您可能不应该将'const char *'传递给'void *'...可能导致错误/不安全。 – Marlon 2012-01-02 09:24:58

+0

不,第二个库不会改变它的输入,它只是想要一个void *作为它的参数。我很抱歉,我没有写这些库,也不能修改它们。 – 2012-01-02 09:34:25

回答

8

一个char*可以隐式转换为void*,因此您的代码可以简化为这样:

second(const_cast<char*>(first())); 

这是如果second定义操作仿佛它的参数有类型的唯一安全const void*

+0

嘿,好的。我从来没有想过要尝试。谢谢。是的,第二个库不会尝试改变它的输入,所以没关系。 – 2012-01-02 09:36:44

+0

不幸的是,图书馆编写者忘记将所有的“const”指示符添加到指针参数中,这使得使用它们的函数更加麻烦。这确实是你可以用一个(相对)容易的良心来使用'const_cast'的例子之一。 – Gorpik 2012-01-02 09:53:35

相关问题