在以下代码中,由于编译器给出了错误
,因此无法计算表达式#include <iostream>
int main()
{
std::cout<< "Welcome\nto\n\nc++!\n";
// std::cout<< "to c++ ! \n";
double a=2;
double b=2;
double c=3;
double d=4;
double e=5;
double f=6;
double sum;
sum=(a*b%c+d/e-f); // error: invalid operand of types double and double to binary operators%
std::cout <<"Sum is:" << (float) sum;
return 0;
}
我知道fmod(x,y)函数可用于双精度但表达式不会保持不变,是否有其他方法我可以做或者我需要自己创建一个表达式求值器。如果是这样的话那怎么样?我是C ++的新手,请帮忙,为什么编译器不够智能呢?
答案 0 :(得分:0)
二元运算符需要两个(=二进制)参数(就像函数一样),因此表达式5 + 4
可以很容易地用一些函数add(5, 4)
编写。
请注意您收到的错误消息,关键字:“无效操作数二元运算符%”
因此,当您想要使用fmod
(仔细检查文档)并确定表达式中的右手和左手操作数时。输出取决于你如何编写表达式,这里有两种可能的方法:
fmod(a*b, c) + d/e-f
这是您编写它的正确order of precedence。
但是,如果我们假设您希望模数的所有内容都是分子,并且模数的所有权利都是分母,我们可以这样写:
fmod(a*b, c+d/e-f)
这不等同于您的原始表达。
请注意此函数的一些documentation,其中包含参数。
在C ++中,对程序员有智能而不是编译器的期望很小。正是这种方式使程序员可以更明确地控制代码的行为方式。