我有以下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以外的值时如何处理。
答案 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
......条件规则既适用于选择陈述,也适用于
for
和while
语句(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
。