我将一些代码从windows(vs2010)移植到gcc
一块看起来像:
double r1 /* = some value */;
double r2 /* = some value */;
double diff = abs(r1-r2);
std::cerr<< r1 << ", " << r2 << ", " << diff<< std::endl;
Run Code Online (Sandbox Code Playgroud)
它编译在gcc(arm-linux-gnueabihf-g ++(Raspbian 6.3.0-18 + rpi1 + deb9u1)6.3.0 20170516),-Wall -Wextra没有任何警告.
结果是:
0.121, 0.0709839, 0
0.015, 0.131958, 0
0.015, 0.00799561, 0
0.21, 0.00799561, 0
0.182, 0.205994, 0
0.015, 0.00799561, 0
Run Code Online (Sandbox Code Playgroud)
在Windows上,结果是正确的.功能有双重载荷abs.
我不是using namespace std;.似乎在gcc下这些重载在全局命名空间中不存在.
我不知道标准究竟是什么意思,但我希望至少有关于将差异传递给abs函数的double-> int-conversion的警告.
我错过了什么吗?为什么我没有得到这个警告?
Mat*_*her 10
abs 是一个C函数,它接受一个整数并返回另一个整数.
您想要使用C++版本std::abs.Clang实际上会警告这个错误(我甚至把它变成了一个错误-Werror=absolute-value),不确定gcc是否有类似的标志(不是警告所有的转换,只是为了abs).
我认为您正在寻找编译器选项-Wfloat-conversion,或者更一般地说,-Wconversion. 然后 g++ 给了我这个警告:
warning: conversion to \xe2\x80\x98int\xe2\x80\x99 from \xe2\x80\x98double\xe2\x80\x99 may alter its value [-Wfloat-conversion]\n double diff = abs(r1-r2);\nRun Code Online (Sandbox Code Playgroud)\n\n-Wall或中不包含这两个选项-Wextra。
只要转换在您的代码中,它就可以工作,请参阅此处。
\n| 归档时间: |
|
| 查看次数: |
284 次 |
| 最近记录: |