我理解这是一个主观问题,所以如果需要关闭我会道歉,但我觉得它经常足以让我想知道是否一般偏好一种形式而不是另一种形式.
显然,最好的答案是"重构代码,这样你就不需要测试虚假",但有时候没有简单的方法可以这样做,而"else"分支就是继续处理.因此,当您必须具有"if not false"构造时,这是首选标准:
不是运营商
if (!value)
Run Code Online (Sandbox Code Playgroud)
或者测试是假的
if (value == false)
Run Code Online (Sandbox Code Playgroud) 这是一个纯粹迂腐的问题,以满足自己的好奇心.
我倾向于在问题中使用后一种选择(所以if (boolCheck) { ... }:),而同事总是写前者(if (boolCheck == true) { ... }).我总是有点嘲笑他,并且从他第一次开始编程时他总是把它解释为一种旧习惯.
但是我今天刚刚想到,实际写出整个== true部分可能实际上需要一个额外的处理步骤,因为任何带有==运算符的表达式都会被计算为布尔值.这是真的?
换句话说,据我所知,没有 == true行的选项可以松散地描述如下:
使用 == true行的选项更像是:
我对么?或者也许任何普通的编译器/解释器都会消除这种差异?或者我忽略了什么,而且根本没有什么区别?
显然,在实际观察到的性能方面没有区别.就像我说的,我只是好奇.
编辑:感谢所有实际发布编译结果的人,以说明两种方法之间的步骤是否不同.(看起来,大部分时间,它们都是,虽然只是轻微的.)
我只想重申,我并不是在问什么是"正确的"方法.我知道很多人喜欢一个人而不是另一个人.我也理解,从逻辑上讲,两者是相同的.如果CPU执行的实际操作对于两种方法完全相同,我只是很好奇; 事实证明,在很多时候(显然它取决于语言,编译器等),它们不是.
在一个C项目(OpenVPN是有问题的项目,提交4029971240b6274b9b30e76ff74c7f689d7d9750)我们有一个模拟bool
typedef int bool;
#define false 0
#define true 1
Run Code Online (Sandbox Code Playgroud)
现在切换到C99布尔
#include <stdbool.h>
Run Code Online (Sandbox Code Playgroud)
但在该项目有地方的布尔的一个不好的用法.我知道std bool表现不同.例如
bool t;
t=2;
if ( t == true)
printf("True!\n");
else
printf("False!\n");
Run Code Online (Sandbox Code Playgroud)
将返回True!与stdbool.h和假的!与#define模拟.
我的问题有没有办法找到这些与stdbool和模拟bool行为不同的代码部分?也许有些编译器标志我忽略了或者是一个好的llvm或gcc中间格式可以被区分?
它没有上面例子那么简单,但必须是不容易看到的东西.绝对不是== true.
更新: 我们发现了问题(mbuf_set有一个int成员len).这有点愚蠢,但问题仍然是如何抓住这些.我很惊讶整数溢出检查不会捕获这样的事情:
static inline bool
mbuf_len (const struct mbuf_set *ms)
{
return ms->len;
}
Run Code Online (Sandbox Code Playgroud) 字符串temp等于我的调试器中的"ZERO:\ t.WORD\t1".(我文件的第一行)
string temp = RemoveWhiteSpace(data);
int i = 0;
if ( temp.length() > 0 && isalpha(temp[0]) )
cout << "without true worked" << endl;
if ( temp.length() > 0 && isalpha(temp[0]) == true )
cout << "with true worked" << endl;
Run Code Online (Sandbox Code Playgroud)
这是我的代码,用于检查temp的第一个字符是否为az,AZ.第一个if语句将评估为true,第二个将评估为false.为什么?!?!?!即使没有"temp.length()> 0 &&",我也试过这个,但它仍然评估为false.它只是讨厌"== true".我唯一能想到的是isalpha()返回!= 0和true == 1.然后,你可以得到isalpha()== 2!= 1.但是,我不知道C++是不是......奇怪的.
顺便说一句,我不需要知道"== true"在逻辑上毫无意义.我知道.
输出是
without true worked
Run Code Online (Sandbox Code Playgroud)
在Ubuntu 9.10上使用GNU GCC编译CodeBlock(如果这很重要)
我试图foo通过使用预定义的函数检查字符串中的每个字符来计算字符串中的字母数isalpha()
#include <iostream>
#include <string>
#include <cstdlib>
using namespace std;
int main()
{
string foo = "aaaaaaa1";
int count=0;
for (int i=0;i<foo.length();i++)
{
if ( isalpha(foo[i]) == true)
{
count++;
}
}
cout<<count;
system("PAUSE");
}
Run Code Online (Sandbox Code Playgroud)
预期产量:
7
当前输出:
0
错误是function isalpha is not returning true for alphabetic,
有人可以向我解释为什么以及如何解决问题以检查给定字符是否是字母