逗号运算符
  本节阅读量: 
  
  
  
      
          | 运算符 | 符号 | 使用形式 | 结果 | 
  
  
      
          | 逗号 | , | 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 }; // 逗号用来分隔同一语句中的变量声明 (不要这样写)
}
 | 
 
没有必要避免使用分隔符逗号(除非是在同一语句里声明多个变量时)。
        
        
        