问题标签 [comma-operator]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
622 浏览

c++ - 逗号运算符的局限性

我已经阅读了这个问题,我想补充一点,使用逗号运算符不能完成哪些事情。这让我很困惑,因为我可以这样做:

但是当我这样做时:

它给了我一个编译器错误。

我想问一下,逗号运算符在实际应用中有什么限制?

0 投票
4 回答
1395 浏览

c++ - cout 是否需要以分号结尾?

我正在阅读 Bjarne Stroustrup 的《编程:使用 C++ 的原则和实践》

hello_world在第 2 章的练习部分,它讨论了在编译程序时查看输入错误的各种方法

本节特别要求:

想想你在程序中输入时可能犯的至少五个错误(例如忘记 keep_window_open(),在输入单词时保持 Caps Lock 键打开,或输入逗号而不是分号)并尝试每个错误,看看当你尝试时会发生什么编译并运行这些版本。

对于该cout行,您可以看到有一个逗号而不是分号。
这编译并运行(对我来说)。是否假设语句已终止(如在 javascript 问题中:为什么使用分号? )?

因为当我尝试keep_terminal_open();编译器时会通知我分号排除。

0 投票
5 回答
1435 浏览

c++ - 条件中的逗号运算符

我读过很多地方,但我真的无法理解条件句中的指定行为。

我知道在赋值中它评估第一个操作数,丢弃结果,然后评估第二个操作数。

但是对于这段代码,它应该做什么?

IF 中的零件文件是不必要的参数,还是有任何意义?

0 投票
3 回答
1391 浏览

c++ - 逗号运算符和 void 表达式

我遇到了这个代码片段1

1:这不是现实生活中的例子。

我的问题是“代码片段的行为是否在 C 和 C++ 中定义良好?

我的看法:

在 C 中,行为是明确定义的,因为6.5.17

逗号运算符的左操作数被评估为 void 表达式;在其评估之后有一个序列点

在 C++03 中,行为定义明确,因为5.18

一对用逗号分隔的表达式从左到右求值,左边表达式的值被丢弃

然而 C++03 (in section 6.6.3) 也说

从函数的末尾流出相当于没有值的返回;这会导致值返回函数中的未定义行为。

同样在 C

如果控制到达}非 void 函数的 end ( )(除了main()),则行为未定义。

因此,考虑到所有这些点,我无法判断实际行为。你们怎么看?

PS:如果你认为这个问题没用,并且你有更好的事情要做,请自助:D。

0 投票
3 回答
1582 浏览

javascript - 逗号运算符返回参数列表中的第一个值而不是第二个值?

MDN声称:

逗号运算符计算其两个操作数(从左到右)并返回第二个操作数的值

但是,当我尝试运行时<script> alert(1, 2); </script>,它显示的是“1”而不是“2”。

我是不是误会了什么?

0 投票
3 回答
504 浏览

perl - Perl中逗号运算符的执行顺序

考虑以下脚本:

正如我所料,这将打印出来1+2+3。该变量$z最初是未分配的,因此'+'x$z计算为空;之后,$z设置为 1,因此'+'x$z现在计算为+.

但是,如果我更改它以使其$z包含+自身:

脚本现在打印+1+2+3。这似乎向我暗示执行顺序不同,但我不明白为什么。

关于导致这两个示例行为不同的执行顺序的精确规则是什么?执行顺序是否明确?

0 投票
2 回答
109 浏览

c++ - 为什么这段代码在 VS 中编译?(“额外”逗号)

下面的行在 for 循环内。如果方法失败,则需要中断。CATEGORY_1 是一个枚举。我将此枚举添加为具有默认值的 AddToList 方法的新参数。如果你仔细看下面,我实际上犯了将逗号和枚举放在函数参数列表之外的错误。这与 VS2010 编译得非常好。因此,我很难发现为该参数而不是 CATEGORY_1 传递了默认值。有谁知道为什么会成功?

0 投票
2 回答
3880 浏览

c++ - 为什么此代码会产生引用逗号运算符的警告?

在回答这个问题时,我遇到了这段代码......

...其中包含一个错字。第 6 行的第二个(预期的)<<运算符被意外写为<.

除此之外,使用 GCC 4.3.4或 4.4.3 编译代码会导致警告:

我的问题:为什么会产生那个特别的警告?它指的是哪个逗号运算符?

注意:我并不是提倡<cout声明中故意使用单个。 我只是在试图找出我链接到的另一个问题的答案时偶然发现了这个警告,并且很好奇编译器为什么会生成它。

0 投票
1 回答
947 浏览

c++ - 有人可以解释这个 C++ 逗号运算符短路示例吗?

有人可以解释这个 C++ 逗号运算符短路示例吗?

为什么第二个版本短路并返回false(至少在 MSVC++ 中),而其他两个版本没有但返回true

0 投票
7 回答
2774 浏览

c++ - sizeof 接受两个参数

在 C++ IS 的 C.1.3(2003。它也在 C++11 IS 中)中,该标准指出了 ISO C 和 C++ 之间的区别;即,对于

sizeof(0, arr)在 C 中返回sizeof(char*),但100在 C++ 中。

我找不到sizeof接受两个论点的文档。明显的后备是逗号运算符,但我不这么认为:sizeof(arr)在 C 中是100; sizeof(0, arr)sizeof(char*)。两者sizeof(0, arr)都在 C++ 中sizeof(arr)100

在这种情况下,我可能会错过 IS 的全部意义。任何人都可以帮忙吗?这类似于 09 年讨论的一个问题,但没有人提到 IS,而且我认为没有给出正确的答案。


编辑:实际上,IS 是在谈论逗号运算符。因此,由于某种原因,在 C 中(0, arr)返回 a char*,但char[100]在 C++ 中返回 a。为什么?