C++ 忽略类型检入函数(需要双精度,提供 int)

C++ Type Check in Functions ignored (required double, provided int)

本文关键字:双精度 提供 int 类型 函数 C++      更新时间:2023-10-16

>我有以下代码

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

double 的隐式转换为 int s(并被截断),并且编译器不会被标准强制发出警告(它会尽可能尽力执行转换)。使用-Wconversion编译

g++ -Wconversion program.cpp

你会收到警告:

警告:从"double"转换为"int"可能会改变其值[-wfloat-conversion]

典型的警告标志-Wall -Wextra不会捕获它,因为很多时候程序员的意图是将double截断为int

活生生的例子在这里。

C++ 通过截断它们来自动将浮点数和双精度转换为整数文本。 所以当你调用dmult(3.3,2)时,3.3变成了3