gpt4 book ai didi

c++ - 为什么允许将 void* 的 static_cast 转换为另一种类型?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:31:39 37 4
gpt4 key购买 nike

我刚刚在读这个帖子: Simple c++ pointer casting

这让我开始思考为什么不允许在不同指针类型之间进行 static_cast(允许的情况除外)除非您将 static_cast 转换为 void* 作为中间步骤。在我看来,要么两者都被允许,要么两者都不被允许。这是一个例子:

char*          cs;
unsigned char* ucs;

cs = reinterpret_cast<char*>(ucs); // 1) allowed, of course
cs = static_cast<char*>(ucs); // 2) not allowed: incompatible pointer types
cs = static_cast<char*>( static_cast<void*>(ucs) ); // 3) now it's allowed!

在我看来,如果#3 是可能的,那么#2 也应该被允许。或者相反,如果 #2 以指针不兼容为由不允许(需要重新解释_cast),那么也许 static_casting 一个 void* 到任何东西都不应该以指针不兼容为由被允许。 (当然,从任何其他指针将 转换为 void* 总是可以的。)

那么,为什么这些可能性之一不是真的 - #2 和 #3 要么都被允许,要么都不被允许?为什么它会像我的示例中所示那样工作?

最佳答案

cs = static_cast<char*>( static_cast<void*>(ucs) ); // 3) now it's allowed!

它会编译。这是否意味着它是允许的?不是。只有在 void* 是通过从 T* 转换获得的情况下,该标准才允许从 void* 转换为 T* ,这不是你的情况。

关于c++ - 为什么允许将 void* 的 static_cast 转换为另一种类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17558986/

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