c++ - 正确的固定大小数组的 c++ 样式转换?

标签 c++ reinterpret-cast static-cast

我有一个关于转换的小问题。

基本上,我有以下代码:

//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*> .他们说 MSDNreinterpret_cast用于将指针转换为另一种指针类型。

但在 Effective C++ 中,我阅读了

reinterpret_cast is intended for low-level casts that yield implementation-dependent (i.e. unportable) results, e.g., casting a pointer to an int

而且这些应该非常罕见。

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

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

最佳答案

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

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

关于c++ - 正确的固定大小数组的 c++ 样式转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17192709/

相关文章:

c++ - 使用OpenCV在YAML文件中不能放置多个Mat对象

c++ - 多个线程在 C++ 中访问 std::map

c++ - 将指向结构的指针转换为具有较少数量字段的另一种结构类型

c++ - 要求通过 static_cast<double>(x) 显式调用运算符 double()

c++ - static_cast 和 RTTI 与 dynamic_cast

c++ - C++ sdi 应用程序中的 Static_cast 编译器错误

c++ - 数字后面 2 的最高次方

c++ - 哪些用例需要 #define 而不使用标记字符串?

c++ - 我可以在不复制的情况下将 std::vector<char> 重新解释为 std::vector<unsigned char> 吗?

C++我们什么时候应该更喜欢使用两个链接的static_cast而不是reinterpret_cast