【发布时间】:2012-01-07 11:29:28
【问题描述】:
我相信在下面的代码中,C“自动将 17 转换为 int *”,正如最近有人指出的那样(但没有给出原因),这是错误的。
int *ptoi = 17; // I assumed that 17 is being automatically casted to int *
我知道,如果我在 C++ 中执行与上述相同的操作,我会收到错误消息 invalid conversion from int to int *。但是如果我在 C++ 中执行以下操作,它就可以正常工作:
int *ptoi = (int *)17;
这就是我认为在 C 中强制转换是隐式的原因。
有人能解释一下为什么在 C++ 中我必须强制转换它,但在 C 中它可以正常工作吗?
【问题讨论】:
-
+1 表示合法使用 C 和 C++ 标签的问题 ;-)
-
我猜 C++ 会进行更严格的类型检查。 C 中的强制转换不应该给你一个指向“17”的指针。它是一个值为“17”的指针(指向“内存地址”17)。作为一种解决方法,我认为您始终可以转换为
void*,然后转换为其他指针类型。 -
C 和 C++ 是不同的语言。 C++ 在很多方面都比 C 更严格,其中之一就是从一种类型到另一种类型的隐式转换。