1

我有以下 IF 语句,但我无法弄清楚它的含义:

if (data->tokens.size()) 
{..
  //reads each token in a for loop and assigns each token to a variable...
}

令牌中有六个值,所以tokens.size()应该返回6,对吧?

我不明白为什么我们需要一个 if 条件?据我了解,如果返回 1 则条件为真,如果返回tokens.size()0则为假。

在我的情况下,它返回6(或任何数量的令牌,可以是任何数字,而不仅仅是 0 或 1)。那么如果条件起作用,这是如何工作的呢?

换句话说,我想知道 if 在获取 0 和 1 以外的值时如何处理。

4

6 回答 6

5

如果没有给出其他内容,C 和 C++ 中的条件语句会隐含地与“不等于零”进行比较。例如if (data->tokens.size())与 相同if (data->tokens.size() != 0)

于 2013-04-08T10:38:10.093 回答
1

if采用 true 或 false bool 表达式,而不是数字。对我们来说幸运的是,如果你给出一个数字,它将被转换为一个布尔值。如果数字为 0,则为 false,否则为 true,因此它将起作用。

于 2013-04-08T10:39:26.317 回答
0

我认为这只是对非空性的测试,以确保我们不会遍历空向量

于 2013-04-08T10:39:03.607 回答
0

它是有条件的而不是循环。如果为真,则进入条件块。如果它为零,那么它是错误的并且它不会进入块。如果有除 0 以外的任何其他值,则为真并进入块。

于 2013-04-08T10:39:55.077 回答
0
if(data->tokens.size()) ~ if(data->tokens.size()!=0) 
于 2013-04-08T10:43:00.880 回答
0

为了更准确:标准说:

6.4 选择声明

选择声明:

if ( condition ) statement

……条件规则既适用于选择语句,也适用于forandwhile语句(6.5)。...条件的值是在除 switch 语句之外的语句中的初始化声明,是上下文转换为的声明变量的值bool(第 4 条)。如果该转换格式不正确,则程序格式错误。… 作为表达式的条件的值是表达式的值,根据上下文转换为bool; 如果该转换格式不正确,则程序格式错误。

转换为 bool 的意思是:

4 标准转换

某些语言结构要求将表达式转换为布尔值。对于某些发明的临时变量 t (8.5),当且仅当 声明格式正确时,出现在这种上下文中的表达式e被称为上下文转换并格式正确。boolbool t(e);

这个很重要。这就是为什么你可以做这种“魔术”:

while(getline(cin,str))) cout<<str;

with 将适用bool(cin)(在这种情况下getline返回cin))

在您的示例中,转换将是:

4.12 布尔转换 [conv.bool]

1 算术、无作用域枚举、指针或指向成员类型的指针的纯右值可以转换为类型的纯右值bool。零值、空指针值或空成员指针值转换为false; 任何其他值都转换为true. 对于直接初始化(8.5),类型的纯右值std::nullptr_t可以转换为类型的纯右值bool;结果值为false

顺便说一句,if您的示例中的 很有可能几乎没有用,甚至只是混淆了代码。考虑:

for (int i=0; i< data->tokens.size(); ++i) 
{..
  //reads a token and assigns to a variable...
}

或者:

for( const auto &token : data->tokens)
    {..
      // assigns token to a variable...
    }

在这两种情况下,for只有在size()>0使多余的if.

于 2013-04-08T11:45:44.877 回答