C++ 中的平等

0 c++ types equality operators

我仍在学习 C++ 编程的基础知识,并尝试了 C++ 运算符的一些应用程序,但似乎有些事情我仍然不明白。

我尝试编写以下行来测试使用等于(==)作为三元运算符的可能性:

cout << "(2+2 == 2*2 == pow(2, 2)) == " << (2+2 == 2*2 == pow(2, 2)) << endl;

输出为0

所以,我怀疑这可能是因为 pow(2,2) 的返回值是双精度型,而前两个操作数的返回值是整数,因此我尝试了以下操作:

cout << "(2+2 == 2*2 == int(pow(2, 2))) == " << (2+2 == 2*2 == int(pow(2, 2))) << endl;
cout << "(double(2+2) == double(2*2) == pow(2, 2)) == " << (double(2+2) == double(2*2) == pow(2,2)) << "\n\n";
Run Code Online (Sandbox Code Playgroud)

两行代码的输出也是 0。

我还尝试使用括号来减少操作数的数量,但最终得到相同的输出。

Aco*_*gua 5

a == b == c没有做你期望它做的事!它首先计算a == b,它是trueor false\xe2\x80\x93 或作为整数值10\xe2\x80\x93 ,然后将此值与c\xe2\x80\x93 进行比较,这样你只能得到trueifc比较的最终值或01在给定情况下它永远不能。为了实现数学 上的等价,a = b = c您需要将一个值与其他两个值进行两次比较,例如a == b && a == c

\n

您选择比较两次的值中的哪一个对于最终结果 \xe2\x80\x93 并不重要,但您不应该计算相同的值两次(至少如果它是复杂的计算);如果计算了所有三个值,则将要比较两次的值存储在临时变量中;具体情况:

\n
int tmp = 2 + 2;\n// (admitted, SUCH A SIMPLE ONE would not be worth the\n//  effort, compiler would optimize it anyway)\n\nstd::cout << (tmp == 2*2 && tmp == pow(2,2));\n
Run Code Online (Sandbox Code Playgroud)\n

但请注意:pow引入浮点 \xe2\x80\x93 ,但如果输入是整数,它仍然会产生正确的结果,您可能会遇到其他值的舍入问题(请参见例如此处或在此处搜索以比较浮点值),所以(除了在这里太过分)如果你真的想使用它,你总是应该三思而后行(是的,的用例\xe2\x80\xa6)!

\n