【发布时间】:2011-09-18 19:59:21
【问题描述】:
在以下类型的代码中,每个变量构造之间是否存在序列点,或者结果未定义?
int a = 0;
int b = a++, c = a++;
我无法在标准中找到对此处序列点的特定引用。这是否意味着它未定义,或者只是我的搜索失败?表达式的完成是一个序列点,但是上面的初始化也算吗?
【问题讨论】:
-
@Mark:正确,逗号是分隔符,在那种情况下不是运算符。 更新:马克去哪儿了? :-S 我冒险猜测,因为它是一个分隔符,所以它肯定是一个序列点,但我急切地等待一个权威的答案。
-
既然这种普遍认为是不好的做法,为什么要担心它。只需将每个声明放在单独的语句中即可。
-
@Martin:我有时发现它对于一次性创建变量和指向它的指针很有用,尤其是在类型名很长的情况下:
MyVeryLongType::subclass::foo<Bar>::type x, * px = &x;... -
我总是做
for(iterator b = begin(), e = end(); ..)这样的事情,我认为这很好。只是不要在初始化程序中产生副作用。 -
@Kerrek SB:使用两行代码(不要偷懒)。您几乎会发现,任何有编码指南的公司都会强迫您重新编写它(习惯它)。正如 litb 提到的那样,它唯一被容忍的地方是 for(;;) ,它被普遍接受为可以(但永远不要做你所做的事情)。
标签: c++ variables comma sequence-points