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。
我还尝试使用括号来减少操作数的数量,但最终得到相同的输出。
a == b == c
没有做你期望它做的事!它首先计算a == b
,它是true
or false
\xe2\x80\x93 或作为整数值1
或0
\xe2\x80\x93 ,然后将此值与c
\xe2\x80\x93 进行比较,这样你只能得到true
ifc
比较的最终值或0
,1
在给定情况下它永远不能。为了实现数学 上的等价,a = b = c
您需要将一个值与其他两个值进行两次比较,例如a == b && a == c
您选择比较两次的值中的哪一个对于最终结果 \xe2\x80\x93 并不重要,但您不应该计算相同的值两次(至少如果它是复杂的计算);如果计算了所有三个值,则将要比较两次的值存储在临时变量中;具体情况:
\nint 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)!
归档时间: |
|
查看次数: |
295 次 |
最近记录: |