gpt4 book ai didi

c++ - 逗号作为变量初始化中的分隔符(不是作为运算符)

转载 作者:可可西里 更新时间:2023-11-01 17:37:44 59 4
gpt4 key购买 nike

这似乎是一个简单的问题,但我已经很久没有以自己的方式检查过这个问题了……当初始化用逗号分隔的变量时,我假设以下是不安全的做法:

unsigned int n = foo.size, nxn = n * n;

因为我从来没有真正使用逗号运算符来表示句法糖等;而是表明两个表达式是独立的——作为一种对“细粒度并行性”(或表达式独立性)的隐式注释,这通常会使代码更简洁,例如,

if (<some condition>)
a = true, b = value;

而不是为分号分隔的表达式要求 {} 范围。

但我的问题实际上是重新检查变量初始化的情况。我的假设是否不正确 nxn 不能依赖于按预期进行初始化?还是我一直都在误解中苦苦挣扎?

最佳答案

根据 [dcl.decl]/3

Each init-declarator in a declaration is analyzed separately as if it was in a declaration by itself. [...]

我们明白了

unsigned int n = foo.size, nxn = n * n;

相同
unsigned int n = foo.size;
unsigned int nxn = n * n;

对于其他规则(例如 auto)或者如果名称遮盖了类型但这些规则不适用于这种情况,有一条注释。


如果将多个变量放在一行中,请谨慎使用指针

int * foo, bar;

不给你两点指点。相反,foo 是一个指针,而 bar 是一个 int。你需要

int * foo, * bar;

得到两个指针。出于这个原因,我更愿意使用

int * foo;
int * bar;

并为安全起见支付额外的击键费用。

关于c++ - 逗号作为变量初始化中的分隔符(不是作为运算符),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54200314/

59 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com