C++ 正确的c++-固定大小数组的样式转换?
我有一个关于演员的小问题 基本上,我有以下代码:C++ 正确的c++-固定大小数组的样式转换?,c++,reinterpret-cast,static-cast,C++,Reinterpret Cast,Static Cast,我有一个关于演员的小问题 基本上,我有以下代码: //Array of ALbyte, size is irrelevant ALbyte buffer[1000]; //... alcCaptureSamples(m_audioDevice,(ALCvoid*)buffer, sample); 和基于Scott Meyers有效C++建议,我想使用C++风格的转换。 但是我真的不知道我应该在reinterpret\u castreinterpret\u cast中选择哪一个用于将指针转换为另
//Array of ALbyte, size is irrelevant
ALbyte buffer[1000];
//...
alcCaptureSamples(m_audioDevice,(ALCvoid*)buffer, sample);
和基于Scott Meyers有效C++建议,我想使用C++风格的转换。 但是我真的不知道我应该在
reinterpret\u castreinterpret\u cast
中选择哪一个用于将指针转换为另一种指针类型
<>但是在有效C++中,我读
reinterpret_cast
用于产生依赖于实现(即不可移植)的结果的低级强制转换,例如,将指针强制转换为int
这些应该是非常罕见的
那么,我应该选哪个演员?显然,我消除了const\u cast
和dynamic\u cast
,但无法确定我应该使用剩下的哪一个。。。(这个问题并没有真正帮助我,因为我不知道我是否想将一个固定大小的数组从OpenAL影响中转换成指针类型)
或者,在这种情况下,我应该完全避免C++风格的强制转换(但是为什么呢)?在执行编译时检查时,您应该尽可能使用静态强制转换
:编译器不会让您强制转换为无效的指针类型
reinterpret\u cast
无法执行除const
到非const
之外的任何编译时检查。除非使用需要void*
的旧接口编程,否则很少使用它
更好的方法是设计代码,这样您就不需要执行强制转换:分解多态性可以帮助您避免它们。在执行编译时检查时,您应该尽可能使用static\u cast
:编译器不会让您强制转换为无效的指针类型
reinterpret\u cast
无法执行除const
到非const
之外的任何编译时检查。除非使用需要void*
的旧接口编程,否则很少使用它
更好的方法是设计代码,这样您就不需要进行转换:分解多态性可以帮助您避免它们。在这种情况下,您可能不需要进行任何转换
请记住数组自然衰减为指针,所有指针都可以隐式转换为void*
(我猜ALCvoid*
就是这样)。在这种情况下,您可能不需要进行任何转换
请记住,数组自然会衰减为指针,所有指针都可以隐式转换为void*
(我想ALCvoid*
就是这样)。也许可以帮助您。也许可以帮助您。在这种情况下,我想我真的无法避免这种情况并重新设计(尽管我很愿意),由于函数中的OpenAL请求类型……在这种情况下,我认为我不能真正避免这种情况并重新设计(尽管我愿意),因为函数中的OpenAL请求类型……这可能有点吹毛求疵,但说“隐式转换”(如果你不需要做任何事情)不是更清楚吗+1.我从来没有听说过。。。我不知道为什么,但我认为不将强制转换(或者更确切地说是“转换”)显式(就像对acloid*
和对纯void*
那样)感觉是错误的……这可能有点吹毛求疵,但说“隐式转换”(如果你不需要做任何转换)不是更清晰一些吗+1.我从来没有听说过。。。我不知道为什么,但我认为不将强制转换(或者更确切地说是“转换”)明确化(就像对acloid*
和对纯void*
那样)感觉是错误的。。。