C++语法问题-为什么我不能用逗号分隔不同类型的变量定义

C++ syntax question - Why can't I use comma to separate variable definition of different types

int main() {
  std::cout << 1, std::cout << 2;
  return 0;
}

上面的代码片段在语法上是正确的,因为逗号可以用来分隔语句。然而,

int main() {
  int a, std::string b;
  return 0;
}

这个returns有错误

Expected initializer before 'b'

这是为什么?在某些情况下我不能使用逗号来分隔语句吗?例如在这种情况下定义变量?

逗号 从不 分隔语句。您的第一个示例是单个语句,由包含 comma operator 的表达式组成。它恰好和你写了两个语句一样做了同样的事情 std::cout << 1; std::cout << 2; 但它们在语法上并不等价。

同样,您的第二个示例是(试图成为)单个声明语句,它在语法上不是有效的。可以使用逗号(不是逗号运算符)来分隔两个相同类型的声明 int a, b;,但有一些变体,例如 int a, *b;,但这仍然是一个声明语句。