这个条件如何运作?

时间:2013-04-08 10:35:22

标签: c++ if-statement

我有以下IF声明,我无法弄清楚它的含义:

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

代币中有六个值,因此tokens.size()应返回 6 ,对吗?

我不明白为什么我们需要if条件?根据我的理解,如果tokens.size()返回 1 ,则条件为真,如果返回 0 则为false。

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

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

6 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

我认为这只是对非空虚的测试,以确保我们不会迭代空载体

答案 3 :(得分:0)

条件不是循环。如果是,则输入条件块。如果它为零那么它是假的并且它不会进入块。如果有任何其他值不是0那么它是真的并且它进入阻塞。

答案 4 :(得分:0)

if(data->tokens.size()) ~ if(data->tokens.size()!=0) 

答案 5 :(得分:0)

为了更加精确:standard说:

  

6.4选择陈述

     

选择语句:

if ( condition ) statement
     

......条件规则既适用于选择陈述,也适用于   forwhile语句(6.5)。 ......条件的价值   除交换机之外的语句中的初始化声明   statement是上下文转换的声明变量的值   至bool(第4条)。如果转换形式不正确,那么程序就是   病态的。 ...作为表达式的条件的值是   表达式的值,上下文转换为bool; ,如果是这样的话   转换是不正确的,程序是不正确的。

转换为bool的意思是:

  

4次标准转化

     

某些语言结构要求将表达式转换为   布尔值。表达出现在这种情境中的表达式e   在上下文中转换为bool并且当且仅当如果   声明bool t(e); 形式良好,对于一些发明的临时性   变量t(8.5)。

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

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

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

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

  

4.12布尔转换[conv.bool]

     

1算术,无范围枚举,指针或指针的prvalue   成员类型可以转换为bool类型的prvalue。零   转换value,null指针值或null成员指针值   到false;任何其他值都将转换为true。对于   直接初始化(8.5),类型为std::nullptr_t的prvalue可以   转换为bool类型的prvalue;结果值为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