我有一个for
循环,我正在使用 slide 运算符,因为我正在使用无符号类型。基本上归结为
for (std::size_t i = 6; i --> 0;){
cout << i;
}
但它输出的数字从5到0(含),省略6.为什么?
非常感谢您对此的看法。我很困惑。
答案 0 :(得分:7)
这是
的试金石这个所谓的&#34;运营商&#34;如果有的话,应谨慎使用。
在for
循环的条件检查中更改变量的状态应该非常谨慎,如果有的话。
最大输出为5只是因为条件测试i
递减,因为i
也减少了for
。在程序控制进入i
循环体之前运行条件检查。
你真的应该重写循环。 不要将-->
的初始值设置为7,因为这是一个肮脏的黑客行为。虽然while
经常与for
一起使用(并强调,在您的编程审核中不太可能赢得许多朋友),但我从未见过它与{int v[] = {1,2,3,4,5};
for (auto i : v)
{
std::cout<<i<<std::endl;
}
一起使用1}}循环之前。
答案 1 :(得分:4)
-->
不是幻灯片运算符。
编译器将其理解为两个不同的运算符--
和>
。
所以你的代码对编译器来说是这样的:
for (std::size_t i = 6; (i--) > 0;){
cout << i;
}
由于在进入循环之前检查循环条件,在第一次执行循环体之前,体i
减少了,因此生成的数字序列为5 4 3 2 1 0。
有关详细信息,请参阅此Stack Overflow问题:What is the "-->" operator in C++?
答案 2 :(得分:1)
在for语句中评估此条件后
5
我将等于5
。所以循环的第一次迭代输出
#include <iostream>
int main()
{
size_t i = 6;
do
{
std::cout << i;
} while ( i-- > 0 );
return 0;
}
要达到效果,您需要按以下方式重写循环
6543210
程序输出
#include <iostream>
int main()
{
for ( size_t i = 6; std::cout << i && i != 0; i-- )
{
//
}
return 0;
}
另一种方式是以下
const size_t N = 6;
for ( size_t i = N + 1; i-- > 0; )
// ^^^^^^^
{
std::cout << i;
}
当然你可以像这样编写循环
std::numeric_limits<size_t>::max()
但是一般来说,当i的初始值等于#include <iostream>
int main()
{
const size_t N = 6;
for ( size_t i = N, j = N; j != 0; j = i-- )
{
std::cout << i;
}
return 0;
}
时,这种方法不起作用。因为如果要为此值加1,你将得到0。
使用for循环的一般方法可以采用以下方式
6543210
它的输出是
if