Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 正确的c++-固定大小数组的样式转换?_C++_Reinterpret Cast_Static Cast - Fatal编程技术网

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 cast
reinterpret\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*
那样)感觉是错误的。。。