C++ 为什么在C+中需要从空指针进行类型转换+;?

C++ 为什么在C+中需要从空指针进行类型转换+;?,c++,c,C++,C,我在Embedded C中多次使用类似于下面的代码 #include <stdio.h> int g_uArray[5] = { 1, 1, 2, 3, 5}; void* foo( int uIndex ); int main() { int* uVar; uVar = foo( 2 ); printf( "Value = %u\n", *uVar ); return 0; } void* foo( int uIndex ) { re

我在Embedded C中多次使用类似于下面的代码

#include <stdio.h>

int g_uArray[5] =
{ 1, 1, 2, 3, 5};

void* foo( int uIndex );

int main()
{
    int* uVar;
    uVar = foo( 2 );
    printf( "Value = %u\n", *uVar );
    return 0;
}

void* foo( int uIndex )
{
    return (void*) &g_uArray[uIndex];
}
用于线路

uVar = foo( 2 );
但是,可以通过给出-fppermission标志来编译它。 现在,我的问题是,为什么C++如此错误(GCC -墙甚至不给出警告)。
如果我用-frimistic编译,它会创建一些运行时问题吗?< /p> ,因为C++是强类型的(不像C,它有一些弱的类型特征,主要是因为它处理的隐式类型转换),并且所有可能改变值的语义的类型转换都应该明确地解释,就像在那个页面上解释的:

void指针非常常见,丢弃类型信息通常更为常见,因为试图保证所有类型的安全更为麻烦。由于void指针非常常见,必须不断地进行转换将非常麻烦,甚至更容易出错


<>在C++中,空洞指针更为少见。继承和模板等特性提供了更好的选择。因此,C++在实际使用时,对空指针的使用会有一点严格的要求。C++的空指针概念有点像“指向任何对象的指针”,因此将任何对象指针转换为“指向任何对象的指针”是完全安全的。但是走另一条路并不安全。它依赖于程序员在适当的时候才这样做,但为了避免意外,需要显式转换。

“隐式转换”相当于“隐式类型转换”、“合并”或“[type]升级”。Cube是显式的(双关语)。谢谢你的纠正,欢迎。+1,C++迫使程序员明确地说明编译器可以自己解决的问题,也无法确定程序员是否出错。在这种情况下,强类型会鼓励更多的错误,比如C++的许多特性。@ LeeDaNeelCrkCK,更糟糕的是,会有C++程序员认为C是C++的一个子集,并且到处都会包含多余的代码,从而使代码混乱。
uVar = foo( 2 );