【发布时间】:2017-06-21 03:02:15
【问题描述】:
我一直避免像下面这样的初始化
const auto& x = a, y = b;
const int* const x = ptr_1, *const y = ptr_2; // wot
因为引用和指针限定符不适用于初始化。诚然它是初学者首先学习的东西之一,与之相关的模棱两可让我觉得下面的内容更清晰,读者需要更少的思考
const auto& x = a;
const auto& y = b;
对于 C++17 和结构化绑定,我很高兴并且看到了很多潜力。 C++17 禁止 C++14 和 C++11 未能修复的内容,auto x {1} 是 int 而不是 std::initializer_list<int>。但是为什么下面的代码不起作用呢?
const auto& [x, y] {a, b};
const auto& [x, y] = {a, b};
后者符合自动推导和初始化列表的新规则,右侧的表达式被视为初始化列表。但是对于以前的编译失败并出现以下错误
initializer for variable '[a, b]' with type 'const auto &' contains multiple expressions
有什么方法可以使用结构化绑定语法同时声明 x 和 y,而不必求助于元组、对等?另外为什么上面的代码示例中的前者是格式错误的代码?该语法是否有歧义?
【问题讨论】:
标签: c++ c++17 structured-bindings