gpt4 book ai didi

c++ - 为什么 C++ 禁止 void* 的隐式转换?

转载 作者:可可西里 更新时间:2023-11-01 18:26:32 25 4
gpt4 key购买 nike

在 C 中,我们可以将 void* 转换为任何其他指针。

但是 C++ 禁止这样做。

int *a = malloc(4);

导致这个错误:

invalid conversion from ‘void*’ to ‘int*’ [-fpermissive]

C++ 有什么潜在的危险吗?

有没有c++的例子?

最佳答案

您不能从 void * 隐式转换的原因是这样做的类型不安全并且有潜在危险。在这方面,C++ 比 C 更努力地保护您,因此这两种语言在行为上存在差异。

考虑以下示例:

short s = 10; // occupies 2 bytes in memory
void *p = &s;
long *l = p; // occupies 8 bytes in memory
printf("%ld\n", *l);

C 编译器接受上述代码(并打印垃圾),而 C++ 编译器将拒绝它。

通过“通过”void * 进行强制转换,我们丢失了原始数据的类型信息,使我们能够将实际上是 short 的内容视为

关于c++ - 为什么 C++ 禁止 void* 的隐式转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23145730/

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