【发布时间】:2017-03-11 21:37:31
【问题描述】:
当我调用一个将参数作为 int 的函数,而我传递一个双精度参数时,在 C++ 中隐式转换有什么用?为什么这不是编译时错误?允许这种情况发生的运行时堆栈中发生了什么?
#include <iostream>
void foo(int num);
int main() {
double doub= 4.9;
foo(doub);
return 0;
}
void foo(int num){
std::cout<<num<<std::endl;
}
【问题讨论】:
-
为什么这不是编译时错误? 回到 80 年代的编程语言不像现在那样类型安全。 C++ 向后兼容 C。
-
运行时堆栈,什么都没有。您不希望在运行时这样做。你会放慢一切,只是为了捕捉几行糟糕的代码。提高编译器的警告级别,您应该会收到转换警告。
-
@user4581301 由于 int 和 double 大小相同,它不会与编译器混淆吗?有时像这样进行隐式转换是否有用?
-
@HamzaKhan:不,它们的大小不同 double 是 8 字节,而 int 仅为 4
-
这里有一篇关于隐式转换的文章:link text