初始化几个用逗号','分隔的变量

Initialize several variables separated by comma ','

使用 C++14,如果我想在同一条指令上声明和初始化两个整数(使用逗号分隔符):

int i,j = 0;
std::cout << i << "," << j << std::endl;

那么只有最右边的变量(j)被正确初始化了。实际上,编译器会输出一条警告消息:

warning: 'i' is used uninitialized in this function [-Wuninitialized]

当然解决方案是在每个变量上重复它

int i=0, j=0;

但问题是:

有没有一种方法可以只用一个赋值运算符正确地初始化多个变量?

遗憾的是没有;这是语法的怪癖。

int i(0), j(0);

是一个替代方案,从 C++98 开始有效。如果您不喜欢重复字面量 0,那么至少对于这种特殊情况,您可以从 C++11 开始编写

int i{}, j{};

您可以使用一个赋值运算符初始化多个变量,但在声明它们时不能:

int i, j;
std::tie(i, j) = std::make_tuple(0, 0);

在 C++17 及更高版本中,您可以:

auto [i, j] = std::tuple(0, 0);