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

Variable initialization in C++: a unique method

本文关键字:一种 方法 变量 初始化 c++      更新时间:2023-10-16

最近我看到了这段代码。我不知道为什么在我的"编程生涯"中从未见过这种语法。

int main()
{
    int b;
    int a = (b=5, b + 5);
    std::cout << a << std::endl;
}

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

语句:

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

使用逗号操作符。c++ 11标准第5.18/1段:

[…用逗号分隔的一对表达式从左到右求值;左边的表达式是一个丢弃的值表述(第5条)与左表达式相关的每个值计算和副作用在每个值计算和与正确表达式相关的副作用之前进行排序。类型结果的值为右操作数的类型和值;结果是相同的值类别作为其右操作数,如果其右操作数是左值和位域,则为位域。如果值正确操作数是临时的(12.2),结果是临时的。

因此,你的语句相当于:
b = 5;
int a = b + 5;

我个人认为没有理由在这里使用逗号操作符。只要以易于阅读的方式初始化变量,除非有很好的理由不这样做。

操作符,逐个求值并返回最后一个值

它不仅可以用于初始化

逗号,操作符允许分隔表达式。

所做的复合语句
exp1, exp2, ..., expn 

expn

首先将b设置为5,然后将a设置为b + 5

注::由于,在操作符表中优先级最低,所以 的语义
int a = b = 5, b+5;

不同于

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

因为第一个被解析为(int a = b = 5), b + 5

当在表达式中使用逗号操作符时,将计算其所有操作数(从左到右)并返回最后一个。

初始化称为复制初始化。如果忽略右边的复杂表达式,则与

中相同:
int a = 10;

这与直接初始化形成对比,它看起来像这样:

int a(10);

(您可能对如何计算逗号表达式感到困惑。如果是这样,请注明

相关文章: