逗号运算符
本节阅读量:
| 运算符 |
符号 |
使用形式 |
结果 |
| 逗号 |
, |
x, y |
分别计算x与y,然后返回y求值的结果 |
逗号运算符(,)让我们在允许单个表达式的地方可以编写多个表达式。逗号运算符计算左操作数,然后计算右操作数,最后返回右操作数的结果。
例如:
1
2
3
4
5
6
7
8
9
10
11
|
#include <iostream>
int main()
{
int x{ 1 };
int y{ 2 };
std::cout << (++x, ++y) << '\n'; // x与y分别加以, 计算的结果是右操作数
return 0;
}
|
首先计算逗号运算符的左操作数,将x从1递增到2。接下来,计算右操作数,将y从2递增到3。逗号运算符返回右操作数(3)的结果,随后将其打印到控制台。
请注意,逗号在所有运算符中的优先级最低,甚至低于赋值。因此,以下两行代码执行不同的操作:
1
2
|
z = (a, b); // 首先计算 (a, b) 得到b的值, 将结果赋值给 z.
z = a, b; // 计算过程是 "(z = a), b", 所以 z 拿到的是 a 的值, 然后计算b,丢弃b的求值结果。
|
这使得逗号运算符的使用有些危险。
在几乎所有情况下,使用逗号运算符编写的语句最好拆开为单独的语句。例如,上述代码可以编写为:
1
2
3
4
5
6
7
8
9
10
11
12
|
#include <iostream>
int main()
{
int x{ 1 };
int y{ 2 };
++x;
std::cout << ++y << '\n';
return 0;
}
|
大多数程序员根本不使用逗号操作符,唯一的例外是for循环中。我们将在以后介绍for语句。
最佳实践
避免使用逗号运算符,但在for循环中除外。
逗号作为分隔符
在C++中,逗号符号通常用作分隔符,这些用法不会调用逗号运算符。分隔符逗号的一些示例:
1
2
3
4
5
|
void foo(int x, int y) // 逗号用来区分函数中的不同参数
{
add(x, y); // 逗号用来区分函数调用中的不同参数
constexpr int z{ 3 }, w{ 5 }; // 逗号用来分隔同一语句中的变量声明 (不要这样写)
}
|
没有必要避免使用分隔符逗号(除非是在同一语句里声明多个变量时)。