今天,我试图回答这篇文章(关于如何检查是否可以构造一个三角形),但是遇到了奇怪的结果。
使用测试数据
不会。唯一的区别在于
我阅读了很多关于
我找到了1篇相关帖子: 为什么g++(4.6和4.7)会将此除法的结果提升为double?我能停止它吗?,但在其他地方没有找到更多信息。
那么这里我错过了什么?
—一些机器信息: - Windows 10, 64位 - Code::Blocks 20.03 - gcc/g++ 6.3.0
使用测试数据
15.15 35.77 129.07
,这段代码:#include <iostream>
using namespace std;
const double e = 0.000001;
void f(double a, double b, double c)
{
if (abs(180 - (a+b+c)) > e) {cout << "test"; }
}
int main()
{
double a,b,c; cin >> a >> b >> c;
f(a,b,c);
}
正常打印test
,而这个:
#include <iostream>
const double e = 0.000001;
void f(double a, double b, double c)
{
if (abs(180 - (a+b+c)) > e) {std::cout << "test"; }
}
int main()
{
double a,b,c; std::cin >> a >> b >> c;
f(a,b,c);
}
不会。唯一的区别在于
using namespace std;
这一行(当我将using namespace std;
添加到第二段代码中时,如预期般正常运行)。我阅读了很多关于
using namespace std;
的帖子:
但似乎using namespace std;
的唯一作用是为了简化编码,换来偶尔会出现类/变量/命名空间名称冲突的情况(当讨论是否使用它时,这一点被提起得最多)。我找到了1篇相关帖子: 为什么g++(4.6和4.7)会将此除法的结果提升为double?我能停止它吗?,但在其他地方没有找到更多信息。
那么这里我错过了什么?
—一些机器信息: - Windows 10, 64位 - Code::Blocks 20.03 - gcc/g++ 6.3.0
abs
不在<iostream>
中,而且你还没有包含想要使用abs
的头文件。很可能你正在调用不同的函数,或者甚至是宏而不是函数。 - NathanOliver#include<cmath>
并将abs
更改为std::abs
。它打印出了“test”。 - Eljayconstexpr
也让我困扰,因为它们不支持编译时评估。它们仅适用于C ++14,因为这是我目前正在使用的版本(不是我选择的,我更愿意暂时转移到C ++17,尽快转移到C ++20...但我的项目卡在了C ++14)。 - Eljaydouble a,b,c; std::cin >> a >> b >> c;
替换为double a = 15.15, b = 35.77, c = 129.07;
吧?这不仅使得重现结果更容易,也消除了namespace std
可能出现的一处问题。 - JaMiT