我有以下代码
#include <iostream>
using namespace std;
int dmult(int a, int b){
return 2*a*b;
}
int main(void)
{
double a = 3.3;
double b = 2;
int c = dmult(a,b);
cout << c << endl;
return 0;
}
它与MinGW编译没有问题。结果是(我认为)是假的。编译器的一个问题就是没有警告,即使输入类型错误,一个期望整数但是加上双精度的函数可以在没有警告的情况下编译?这是否意味着C ++忽略了函数的输入类型?它不应该意识到函数参数有错误的类型吗?
答案 0 :(得分:9)
double
可隐式转换为int
(并被截断),并且标准不强制编译器发出警告(它会尽力执行转换只要有可能)。使用-Wconversion
g++ -Wconversion program.cpp
你会收到警告:
警告:转换为&#39; int&#39;来自&#39; double&#39;可能会改变其值[-Wfloat-conversion]
典型的警告标记-Wall -Wextra
无法捕获它,因为很多时候程序员打算将double
截断为int
&{ #39; S
直播示例here。
答案 1 :(得分:1)
c ++通过截断它们自动将浮点数和双精度数转换为整数文字。所以当你调用dmult(3.3,2)时,3.3变为3