0

我有一个关于演员表的小问题。

基本上,我有以下代码:

//Array of ALbyte, size is irrelevant
ALbyte buffer[1000];
//...
alcCaptureSamples(m_audioDevice,(ALCvoid*)buffer, sample);

并基于 Scott Meyers Effective C++ 建议,我想为此使用 c++ 风格的演员表。

但我真的不知道我应该在reinterpret_cast<ALCvoid*>和之间选择哪一个static_cast<ALCvoid*>。他们在MSDN上说reinterpret_cast用于将指针转换为另一种指针类型。

但是在 Effective C++ 中,我读到

reinterpret_cast适用于产生依赖于实现(即不可移植)结果的低级强制转换,例如,将指针强制转换为 int

并且这些应该是非常罕见的。

那么,我应该选择哪个演员?我显然消除了const_castdynamic_cast但无法确定我应该使用剩下的哪一个......(这个问题并没有真正帮助我,因为我不知道我是否想将固定大小的数组转换为指针OpenAL 是否影响类型)。

或者我应该在这种情况下完全避免 C++ 风格的演员(但为什么)?

4

2 回答 2

3

在这种情况下,您可能不需要进行任何转换。

请记住,数组自然会衰减为指针,并且所有指针都可以隐式转换为void*(我猜ALCvoid*是这样)。

于 2013-06-19T13:42:39.280 回答
0

您应该static_cast尽可能使用它,因为它会执行编译时检查:编译器不会让您强制转换为无效的指针类型。

reinterpret_castconst除了to之外,不能执行任何编译时检查non-const。除非使用需要void*.

更好的是设计您的代码,这样您就不需要进行强制转换:探索多态性可以帮助您避免它们。

于 2013-06-19T13:39:11.423 回答