C++ “是怎么回事?”;而(a%5)";及;而(五)";不是语法错误吗?
在解决问题时,我在while循环中多次遇到这种特殊情况:C++ “是怎么回事?”;而(a%5)";及;而(五)";不是语法错误吗?,c++,C++,在解决问题时,我在while循环中多次遇到这种特殊情况: while(a%5) statement; 或者类似的 while(5) statement; 起初我认为这是某种打印错误或语法错误。但是当我尝试这个程序时,它工作得非常好!!它是如何工作的?不同于零的整数在C++中是真实的在条件求值为真的情况下,非零整数 0作为条件中的整数计算为false 为什么??编译器只是将条件表达式转换为布尔表达式 只要expression的计算结果为true,就会执行while(expres
while(a%5)
statement;
或者类似的
while(5)
statement;
起初我认为这是某种打印错误或语法错误。但是当我尝试这个程序时,它工作得非常好!!它是如何工作的?不同于零的整数在C++中是真实的在条件求值为真的情况下,非零整数 0作为条件中的整数计算为false 为什么??编译器只是将条件表达式转换为布尔表达式 只要
expression
的计算结果为true,就会执行while(expression)
条件体
编译器尝试将表达式强制转换为布尔值。0以外的整数强制转换为true,而0强制转换为false
只要表达式的结果为非零整数,则结果将为真
如果表达式没有隐式或显式转换为布尔值,则会出现问题。此外,如果您不理解表达式的隐式转换,就会出现问题
例如,假设您有以下代码:
int a = 6;
while(a % 5) {
std::cout << "a is " << a << std::endl;
a--;
}
inta=6;
而(a%5){
std::cout这是因为整数值可以转换为布尔值。州的第7.14节:
算术、非范围枚举、指针或指向的指针的PR值
成员类型可以转换为bool类型的prvalue。零值,
空指针值,或将空成员指针值转换为false
;任何其他值都将转换为true。用于直接初始化
(11.6),std::nullptr_t类型的prvalue可以转换为prvalue
类型为bool;结果值为false
因此,整数值0被视为false,而任何其他整数值都被视为true
在您的示例中,while(a%5)
意味着只要a
不能被5整除,循环就会执行。对于while(5)
,这将是一个无限循环。您认为它的哪一部分会出错?在知道您的期望是什么以及为什么之前,我们无法真正回答!while(1)在编写无限循环时是惯用的。可能作者感到厌烦,决定使用while(5)相反,网络结果是相同的。这叫做FWIW,你可能想链接到C++ 17标准,因为这是C++标签的现行标准。你可以得到HTML链接到其他标准:@ NaNaLover谢谢。更新以反映C++ 17。