C++ for循环中的意外行为
这会编译并运行,但会为“a”生成垃圾值。为什么“a”增量不像“b”?为什么会产生垃圾C++ for循环中的意外行为,c++,C++,这会编译并运行,但会为“a”生成垃圾值。为什么“a”增量不像“b”?为什么会产生垃圾 for(a,b=0; a,b != 55; a,b++) { //outputs garbage std::cout << "a = " << a << std::endl; //outputs expected results std::cout << "b = " << b << std::endl;
for(a,b=0; a,b != 55; a,b++)
{
//outputs garbage
std::cout << "a = " << a << std::endl;
//outputs expected results
std::cout << "b = " << b << std::endl;
}
(a,b=0;a,b!=55;a,b++)的
{
//输出垃圾
std::cout逗号运算符表示执行左侧的表达式,然后执行右侧的表达式:
a, b=0
首先执行不执行任何操作的a
,然后执行将零赋值给b的b=0
为什么存在逗号运算符?当表达式有副作用时,逗号运算符可能很有用
它还提供一个序列点,告诉编译器“在右边发生任何事情之前,左边的所有事情都必须完成。这限制了编译器允许的优化,因此,例如a++=1,b=a+c[a]在将其用作索引之前,总是向a添加一个。类似于b=++a+c[a]因为编译器可以在使用它之前或之后增加一个索引。你需要学习C++语法——特别是逗号运算符不做你认为它做的事。当然,它可以工作。但是,它可能会以不同于你预期的方式工作。你怎么期望程序能工作?对我来说,输出是什么?期望?@DaveB很迂腐,它不适合您,因为它在编写时包含未定义的行为。a
变量未初始化。@DaleWilson说得好,我应该说我得到了我期望的输出。