多变量初始化编译器支持

时间:2019-05-24 12:38:29

标签: c++ compiler-errors initialization

在g ++ 7.4下,我可以这样声明和初始化多个变量:

std::pair<T, T> foo();

int main ()
{  auto [a, b] = foo();  }

但是在Apple clang-703下,它给了我一个错误。

在两个编译器中我都找不到有关此功能支持的任何信息。现代编译器是否支持它,还是我不应该使用它?功能的名称也叫什么?

编辑: 错误是:

auto [a, b] = foo();
      ^1    ^2

1 =>使用未声明的标识符'a'。

2 =>预期的不合格ID。

1 个答案:

答案 0 :(得分:1)

这是一种称为 structured binding 的C ++ 17功能。

Clang 5 supports them;实际上是it did since 4, as do many other compilers

问题是,您正在使用具有different version numbers的Apple Clang。可能是您的编译器太旧了,或者您没有像使用GCC 7.4一样启用C ++ 17功能(在该版本中C ++ 17仍处于试验和选择启用状态)。