忽略C ++类型检入函数(必需double,提供int)

时间:2015-04-23 23:14:18

标签: c++ function arguments

我有以下代码

#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 ++忽略了函数的输入类型?它不应该意识到函数参数有错误的类型吗?

2 个答案:

答案 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