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

时间:2018-01-08 10:09:30

标签: c++ initialization declaration assignment-operator

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

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

然后只正确初始化最正确的变量(j)。实际上,编译器会输出一条警告消息:

  

警告:&#39;我&#39;在此函数中使用未初始化的[-Wuninitialized]

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

int i=0, j=0;

但问题是:

有没有办法只用一个赋值运算符正确初始化几个变量?

3 个答案:

答案 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);