C++中的变量初始化:一种独特的方法

FoY*_*FoY 1 c++ initialization

最近我遇到了这段代码.我不知道为什么我在所有"编码生活"中都没有看到过这种语法.

int main()
{
    int b;
    int a = (b=5, b + 5);

    std::cout << a << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

a的值为10.这种初始化方式到底叫什么?它是如何工作的?

And*_*owl 6

这个说法:

int a = (b=5, b + 5);
Run Code Online (Sandbox Code Playgroud)

使用逗号运算符.根据C++ 11标准的第5.18/1段:

[...] 用逗号分隔的一对表达式从左到右进行评估 ; 左表达式是一个废弃的值表达式(第5条).83在与右表达式相关的每个值计算和副作用之前,每个与左表达式相关的值计算和副作用都会被排序.结果的类型和值是右操作数的类型和值 ; 结果与右操作数具有相同的值类别,如果右操作数是glvalue和位域,则是一个位域.如果右操作数的值是临时值(12.2),则结果是临时值.

因此,您的陈述相当于:

b = 5;
int a = b + 5;
Run Code Online (Sandbox Code Playgroud)

就个人而言,我没有看到在这里使用逗号运算符的原因.只需以易读的方式初始化变量,除非您有充分的理由不这样做.