这个条件是如何工作的?
How is this if condition working?
我有以下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,则if条件为真,如果返回0,则为假。
在我的例子中,它返回6(或者任何token的数量,可以是任何数字,而不仅仅是0或1)。那么这个if条件是如何工作的呢?
换句话说,我想知道if如何处理当它得到0和1以外的值
C和c++中的条件语句在没有给出其他条件的情况下隐式地与"不等于零"进行比较。例:if (data->tokens.size())
与if (data->tokens.size() != 0)
相同。
if
接受一个真或假bool表达式,而不是一个数字。对我们来说幸运的是,如果给出一个数字,它将被转换为bool类型。如果数字为0,则为False,否则为true,因此可以工作
我认为这只是一个非空的测试,以确保我们不会迭代空向量
是有条件的,不是循环。如果为真,则输入条件块。如果它是零,那么它是假的,它不会进入block。如果存在除0以外的值则为true,并进入block
if(data->tokens.size()) ~ if(data->tokens.size()!=0)
更准确地说:标准是:
6.4选择语句selection-statement:
条件规则既适用于选择语句,也适用于if ( condition ) statement
for
和while
语句(6.5)。…条件的值除switch语句外的语句中的初始化声明语句是声明的变量在上下文环境中转换的值转换为bool
(第4条)。如果该转换是病态的,则程序是错误的不规范的。以表达式形式出现的条件的值是表达式的值,上下文中将转换为bool
;如果是转换是病态的,程序是病态的。
转换为bool值意味着:
4标准转换
某些语言结构要求将表达式转换为布尔值。表达式
e
出现在这样的上下文中在上下文中转换为bool
,并且格式良好,当且仅当声明bool t(e);
是格式良好的,对于一些虚构的临时而言变量t (8.5).
这很重要。这就是为什么你可以做这样的"魔术":
while(getline(cin,str))) cout<<str;
with将应用bool(cin)
(在本例中,getline
返回cin
)
4.12布尔转换[conv.bool]
1算术、无作用域枚举、指针或指针的右值to成员类型可以转换为
bool
类型的右值。一个零值、空指针值或空成员指针值进行转换tofalse
;其他值转换为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...
}
在这两种情况下,只有当size()>0
使if
冗余时,for
才会进入
- QSqlquery prepare()和bindvalue()不工作
- 导入库可以跨dll版本工作吗
- 以螺旋方式打印矩阵的程序.(工作不好)
- 对象指针在c++中是如何工作的
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++为线程工作动态地分割例程
- 为什么我的 std::ref 无法按预期工作?
- 布尔比较运算符是如何在C++中工作的
- SampleConsensusPrerejective(ext.RANSAC)是如何真正工作的
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- <<操作员在下面的行中工作
- 有人能解释一下为什么下界是这样工作的吗C++的
- ExtractIconEx:可以工作,但偶尔会崩溃
- C++中的memset函数工作不正常
- 当我在第一个循环中使用"auto"时,它工作正常,但是使用"int"它会给出错误,为什么?
- 当 int 方法工作正常时,void 方法有何不同,或者为什么我不能调用 void 方法?
- sdl软件渲染器不工作,工作在硬件加速的一个