Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ for循环中的意外行为_C++ - Fatal编程技术网

C++ for循环中的意外行为

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;

这会编译并运行,但会为“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;
}
(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说得好,我应该说我得到了我期望的输出。