【发布时间】:2014-02-03 21:36:21
【问题描述】:
所以我正在查看 C++ 运算符规则,就像我的程序开始表现异常时一样。我遇到了逗号运算符。现在,我知道它在那里有一段时间了,但从未使用过,所以我开始阅读,发现了这个小宝石:
if (int y = f(x), y > x)
{
// statements that use y
}
我从未想过使用逗号的第一个参数的副作用来获取局部范围的变量,而无需庞大的块分隔代码或重复的函数调用。当然,这一切都让我非常兴奋,我立即跑去尝试。
test_comma.cpp: In function 'int main()':
test_comma.cpp:9:18: error: expected ')' before ',' token
if (int y = f(x), y > x) {
我在 C 和 C++ 编译器上都试过这个,但他们都不喜欢它。我尝试在外部范围内声明y,并且在if 条件中没有int 的情况下它编译并运行得很好,但这违背了这里逗号的目的。这只是 GCC 实现的怪癖吗?互联网上的观点似乎是这应该是完全有效的 C(在我看来,表面上是 C++)代码;在我见过的任何 GCC 或 C++ 论坛上都没有提及此错误。
编辑:更多信息。我在 Windows 7 64 位上使用 MinGW GCC 4.8.1-4(虽然很明显我的二进制文件是 32 位的;我需要在这些天安装 mingw-w64)。
我也尝试在条件语句之外使用这个技巧,如下所示:
int y = (int z = 5, z);
这引发了两个不同的错误:
test_comma.cpp: In function 'int main()':
test_comma.cpp:9:11: error: expected primary-expression before 'int'
int y = (int z = 5, z);
^
test_comma.cpp:9:11: error: expected ')' before 'int'
在我上面的if 语句中创造性地使用了括号,我也设法在那里得到了同样的错误。
【问题讨论】: