C++ 为什么两种情况下的行为不同。int i=1,2,3;第二。int i;i=1,2,3;

C++ 为什么两种情况下的行为不同。int i=1,2,3;第二。int i;i=1,2,3;,c++,c,operators,C++,C,Operators,在使用GCC编译器时,在C程序中使用以下两种运算符,观察到了不同的行为 一, 以及 二, 在第一种情况下,编译器给出了错误“错误:预期标识符或'('在数值常量之前)”。 在第二种情况下,没有错误,输出为1。 这里有人能详细解释这两种情况下的编译器行为吗? 编译器如何解释这两个语句 提前感谢您的投入 在第一种情况下,逗号分隔同一类型的几个变量的声明和初始化: int i = 1, j = 2, k = 3; 您可以添加括号来告诉编译器它是一个表达式 int i = (1, 2, 3); 如果将

在使用GCC编译器时,在C程序中使用以下两种运算符,观察到了不同的行为

一,

以及

二,

在第一种情况下,编译器给出了错误“错误:预期标识符或'('在数值常量之前)”。 在第二种情况下,没有错误,输出为1。 这里有人能详细解释这两种情况下的编译器行为吗? 编译器如何解释这两个语句

提前感谢您的投入

  • 在第一种情况下,逗号分隔同一类型的几个变量的声明和初始化:

    int i = 1, j = 2, k = 3;
    
    您可以添加括号来告诉编译器它是一个表达式

    int i = (1, 2, 3);
    
    如果将它们组合在一起,就更容易看出为什么没有括号的逗号是不明确的:

    int i = (1, 2, 3), j = 4, k = 5;
    
  • 在第二种情况下,逗号分隔3个表达式

    (i = 1), 2, 3
    

  • 事实上,第一个方法没有“工作”。“JunZWiCK”只是语法的一个细节,C++没有真正的操作符优先,相反有不同的表达式类型,在这个上下文中不允许使用逗号运算符的表达式。添加一些括号,虽然可以,但是代码> int i=(1, 2, 3)。;有效。@JohnZwinck我已经添加了一个例子来说明为什么它不起作用。确切地说,
    I=1,2,3
    ,没有什么不明确的地方,因为逗号的优先级低于赋值。因此,子表达式是
    I=1
    2
    3
    。整个表达式都有赋值的副作用在第二种情况下,输出不应该是
    3
    ?@haccks为me@amdixon;我想错了。它将并且应该输出
    1
    int i = (1, 2, 3), j = 4, k = 5;
    
    (i = 1), 2, 3