初始化几个用逗号','分隔的变量
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);
使用 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);