gpt4 book ai didi

c++ - char** x = (char**) arg 是否等同于 reinterpret_cast(const_cast(arg) )?

转载 作者:太空狗 更新时间:2023-10-29 20:26:58 25 4
gpt4 key购买 nike

a) 下面的 X1 和 X2 是否等价?如果不是,应该如何进行显式重新解释/常量转换?

 void some_legacy_function(const void* arg) {
char** X1 = (char**) arg;
char** X2 = reinterpret_cast<char**>(const_cast<void*>(arg) );
/* not surprisingly, indexing into X1 randomly crashes in release build */
}

b) 这个转换对我来说似乎很奇怪,在某些情况下它实际上是 100% 合法的吗?

最佳答案

a) 第一行相当于static_cast<char**>(const_cast<void*>(arg)) , 我相信。并不是说它有任何区别。

b) 那么,如果 arg 实际上确实指向一个 char* 数组,那是合法的。如果一个reinterpret_cast s 一个指向 U* 指针的 T* 指针(对于任意类型 T 和 U,相关或其他类型)并返回到 T*,保证返回原始值。所以是的,可以构建一个示例,其中该代码可以工作。当然,这并不意味着功能设计得很好。

关于c++ - char** x = (char**) arg 是否等同于 reinterpret_cast<char**>(const_cast<void*>(arg) )?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17687299/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com