我一直避免像下面这样的初始化
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}
即 is anint
和 not 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,而不必求助于元组、对等?另外为什么上面的代码示例中的前者是格式错误的代码?该语法是否有歧义?