C++ C++;没有花括号的while循环?

C++ C++;没有花括号的while循环?,c++,C++,我正在研究一些代码,我注意到一些我以前从未见过的东西 有一个while循环,但没有花括号。 我应该解释代码的作用,但这部分和while混淆了我 如果有人能解释为什么while循环没有花括号,我将不胜感激 #include <cstring> #include <cerrno> #include <algorithm> #include <functional> #include <iostream> #include <memor

我正在研究一些代码,我注意到一些我以前从未见过的东西

有一个while循环,但没有花括号。 我应该解释代码的作用,但这部分和while混淆了我

如果有人能解释为什么while循环没有花括号,我将不胜感激

#include <cstring>
#include <cerrno>
#include <algorithm>
#include <functional>
#include <iostream>
#include <memory>

#include <sys/random.h>
#include <sys/types.h>
#include <unistd.h>

using namespace std;

size_t n_children = 120;          //size_t is an unsigned integer 0 .. 4,294,967,295

typedef int64_t Konto;          // -9,223,372,036,854,775,808 .. 9,223,372,036,854,775,807, typedef abkürzung fü int64_t an Konto zugewiesen

Konto konto = 0;                // 64 bits long long

int main() {
  while (fork() && --n_children);   

  unsigned int transaktionen = 100;     // 
  while (transaktionen--) {             // 100 times
    int8_t value;                       //  8 bit signed char (-128 .. 127)
    if (getrandom(&value, sizeof(value), 0) == sizeof(value))
      konto += value;
  }

  cout << "My Konto value: " << konto << endl;
  return 0;
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
儿童人数=120//大小\u t是无符号整数0。。4,294,967,295
typedef int64_t Konto;//-9,223,372,036,854,775,808 .. 9223372036854775807,类型定义为abkürzung füint64_t an Konto zugewiesen
近邻近邻=0;//64位长
int main(){
while(fork()&&--n_子项);
无符号整数transaktionen=100;//
而(transaktionen--){//100次
int8_t value;//8位有符号字符(-128..127)
if(getrandom(&value,sizeof(value),0)=sizeof(value))
konto+=值;
}

coutwhile循环的语法是
while()

该语句可以是单个语句,也可以是大括号中的复合语句。 这里的语句就是
,空语句

所以这相当于

while (fork() && --n_children){}
while(1) {}
其中,该语句是复合语句,没有任何其他嵌套语句。
如果所有工作都是在控制条件下完成的,那么这也是首选的形式。

while循环的语法是
while()

该语句可以是单个语句,也可以是大括号中的复合语句。 这里的语句就是
,空语句

所以这相当于

while (fork() && --n_children){}
while(1) {}
其中,该语句是复合语句,没有任何其他嵌套语句。
如果所有工作都是在控制条件下完成的,这也是首选的形式。

C/C++中的while循环定义为:-

while condition
   statement or block
块是一对大括号内的一系列语句。语句只是一行以分号结尾的代码。语句可以为null或空,因此“;”是有效语句。 因此,在这种情况下,当while循环的内容为空时,while循环中的条件会被重复测试,因此它会在不断重新测试条件时“旋转”(在本例中为fork'ing)。这不是一种理想的模式,有时称为“忙等待”循环,它会消耗大量CPU时间。 在本例中,更清晰的书写方式是:-

for (int count = 0 ; count < n_children ; ++count)
{
  fork ();
}
for(int count=0;count

较旧的编译器可能会生成效率更高的代码,但现在的差异将非常小。

C/C++中的while循环定义为:-

while condition
   statement or block
块是一对大括号内的一系列语句。语句只是一行以分号结尾的代码。语句可以为null或空,因此“;”是有效语句。 因此,在这种情况下,当while循环的内容为空时,while循环中的条件会被重复测试,因此它会在不断重新测试条件时“旋转”(在本例中为fork'ing)。这不是一种理想的模式,有时称为“忙等待”循环,它会消耗大量CPU时间。 在本例中,更清晰的书写方式是:-

for (int count = 0 ; count < n_children ; ++count)
{
  fork ();
}
for(int count=0;count

较旧的编译器可能会产生更高效的代码,但现在的差异将非常小。

与流行的观点相反,
if
while
for
在主体为空时可以用分号终止,而已经足够的内容可以不用主体来表达。 例如,这是一个无限循环:

while(1);
这相当于

while (fork() && --n_children){}
while(1) {}
在您的示例中:

while (fork() && --n_children);
这会一直调用
fork()
函数并递减
n_children
,直到这两个表达式中至少有一个计算为
0
false
。当然,这相当于:

while (fork() && --n_children) {}
如果
n\u children
变为0或
fork()
返回错误值,则循环停止。换句话说,两个表达式的计算结果都必须为
true/1
,循环才能继续,因此
和&

使用空
for
循环计算C字符串长度的一个简短示例:

int main()
{
    char str[] = "A String";
    for(len = 0; str[len] != '\0'; len++);  
    printf("Length: %d", len); 
}

与流行的观点相反,
if
while
for
如果有一个空的主体,可以用分号终止,而足够的内容可以不用主体来表达。 例如,这是一个无限循环:

while(1);
这相当于

while (fork() && --n_children){}
while(1) {}
在您的示例中:

while (fork() && --n_children);
这会一直调用
fork()
函数并递减
n_children
,直到这两个表达式中至少有一个计算为
0
false
。当然,这相当于:

while (fork() && --n_children) {}
如果
n\u children
变为0或
fork()
返回错误值,则循环停止。换句话说,两个表达式的计算结果都必须为
true/1
,循环才能继续,因此
和&

使用空
for
循环计算C字符串长度的一个简短示例:

int main()
{
    char str[] = "A String";
    for(len = 0; str[len] != '\0'; len++);  
    printf("Length: %d", len); 
}

它一直调用
fork()
函数,直到它的返回值和
n_子项
减1都为正。循环的主体是
-空语句。它相当于
{}
@gscaparrotti No,它在“条件为非零,而不是“直到”时继续调用函数@Markus,你说得对,我的badIt一直在调用
fork()
函数,直到它的返回值和
n_子函数都是正数。循环的主体是
-空语句。它相当于
{}
@gscaparrotti不,它一直在“条件为非零,而非零”时调用函数“直到”@Markus,你说得对,我的孩子,我其实不知道