我只是为了知识而问这个问题(因为我认为它与像我一样的初学者没有任何关系).
我读过C程序员更喜欢的
for(; ;) {....}
Run Code Online (Sandbox Code Playgroud)
过度
while(1) {....}
Run Code Online (Sandbox Code Playgroud)
因效率原因而无限循环.一种形式的循环比另一种循环更有效,或者仅仅是风格问题,这是真的吗?
找到了这个for循环的代码.while(true)例如,使用它的确切功能是什么?它使用更少的内存吗?
我明白了
for (;;)
{
// Some code here
}
Run Code Online (Sandbox Code Playgroud)
经常.但它提供了哪些好处以及为什么不选择while(1){}?
最近在进行c ++教程时,我遇到了一个如下所示的for循环:
for (;;){
//Do stuff
}
Run Code Online (Sandbox Code Playgroud)
这是一个无限循环吗?我为什么要用这个while(1)呢?
我试图获得 1 毫秒的延迟,但我得到了 15 倍的延迟。我也尝试过使用 windowsSleep(1)函数,这也给了我相同的结果。
为什么我没有得到精确的毫秒延迟?
因为它有 1 秒的延迟。
#include <iostream>
#include <Windows.h>
#include <thread>
#include <chrono>
void counter1();
auto main() -> int
{
std::thread p(&counter1);
p.join();
return 0;
}
void counter1()
{
int nStep = 0;
const int STEP = 1000;
auto start = std::chrono::high_resolution_clock::now();
for (;;)
{
++nStep; // incrementing every millisecond
std::this_thread::sleep_for(std::chrono::milliseconds(1));
if (nStep == STEP) { // compares at second
auto duration = std::chrono::high_resolution_clock::now() - start;
std::cout << "counter took " <<
std::chrono::duration_cast<std::chrono::seconds>(duration).count() …Run Code Online (Sandbox Code Playgroud) 我找到了这个实现char * strchr (const char *string, int c);:
for (;;)
if (*string == c)
return (char *) string;
else if (*string == '\0')
return NULL;
else
string++;
Run Code Online (Sandbox Code Playgroud)
但对我来说,这相当于执行以下操作,这将更容易阅读:
while (*string != c && *string != '\0')
string++;
return (*string == c) ? ((char *) string) : (NULL);
Run Code Online (Sandbox Code Playgroud)
我认为libc有一些原因可以实现第一个.但任何看法背后的原因是什么?
我一直在阅读作者使用的编程书(java)for(;;)而不是while(true).这件事真的开始让我烦恼所以我认为我应该检查哪个是最好用的,如果有任何差异.以下是可能的无限循环:
for(;;){
}
while(true){
}
do{
}while(true)
Run Code Online (Sandbox Code Playgroud)