作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
在 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/
我是一名优秀的程序员,十分优秀!