为什么以下代码不会产生编译错误?

Vij*_*jay 1 c++ compiler-errors comma-operator

我正在使用VS2005编译器,我期待以下代码给出编译错误.

int a=1, b= 2, c=3;
a = (b,c);
Run Code Online (Sandbox Code Playgroud)

后赋值的值是3.根据我的理解,它应该给出编译错误.

我很高兴知道这背后是否有任何正当理由.

Cod*_*ray 6

你的代码中唯一的错误就是你忘记了第二行末尾的分号,但我认为在撰写你的问题时这是一个印刷错误,而不是你问题的实际推力.

我认为你所展示的代码没有理由产生编译错误.它编译对我来说很好a,实际上,它的值是3.

亲眼看看:以下代码返回3:

int main()
{
    int a=1, b= 2, c=3;
    a = (b,c);

    return a;
}
Run Code Online (Sandbox Code Playgroud)

诀窍是你使用逗号运算符,它运算符来计算它的第一个操作数,然后丢弃结果,然后计算第二个操作数并返回它的值.

但是,正如Charles Bailey所说,你必须在函数内部包含问题中显示的代码,否则你将在任何编译器中得到编译错误.C++不允许在函数之外使用赋值语句.


Thi*_*ler 5

您在C++中使用逗号运算符,它不常用.其工作原理如下

<expression1>, <expression2>
Run Code Online (Sandbox Code Playgroud)

它评估<expression1>并丢弃结果,然后进行评估<expression2>,并将结果作为整个表达式的值返回.