使用C ++ 14,如果我想在同一条指令上声明和初始化两个整数(使用逗号分隔符):
int i,j = 0;
std::cout << i << "," << j << std::endl;
然后只正确初始化最正确的变量(j
)。实际上,编译器会输出一条警告消息:
警告:&#39;我&#39;在此函数中使用未初始化的[-Wuninitialized]
当然解决方案是在每个变量上重复它
int i=0, j=0;
但问题是:
有没有办法只用一个赋值运算符正确初始化几个变量?
答案 0 :(得分:1)
在C ++ 17及更高版本中,您可以:
auto [i, j] = std::tuple(0, 0);
答案 1 :(得分:0)
可悲的是没有;这是语法的一个怪癖。
#include <new>
class A {
public:
bool f(std::nothrow_t, int* status = nullptr) noexcept {
if (status) *status = 1;
return true;
}
void f() {
throw std::make_pair<int, bool>(1, true);
}
};
int main() {
A a;
a.f(); // Calls 'void f()'
a.f(std::nothrow); // Calls 'void f(std::nothrow_t, int*)'
}
是一种替代方案,有效来自C ++ 98。如果您不想重复文字0,那么至少从特殊情况开始,您可以从C ++ 11开始编写
int i(0), j(0);
答案 2 :(得分:-2)
您可以使用一个赋值运算符初始化多个变量,但在声明它们时不能:
int i, j;
std::tie(i, j) = std::make_tuple(0, 0);