如何使用C++17结构化绑定为数组元素赋值?
问题核心
结构化绑定的语法规则明确要求,[]内只能填写新声明的标识符(变量名),不支持填入已经存在的左值表达式(比如已定义数组的元素、已声明的普通变量)。你写的auto [arr[0], arr[1]] = makePair();不符合语法要求,本身就是不被C++标准支持的写法。
解决方案
方案1:使用std::tie实现(C++11及以上都支持,最优解)
std::tie可以把多个左值打包成一个tuple,直接接受pair/tuple类型的赋值,不需要额外声明临时变量,无额外运行时开销。
代码示例:
#include <utility> // std::tie, std::pair std::pair<int, int> makePair() { return { 10, 20 }; } int main() { int arr[20]; // 直接赋值给数组元素 std::tie(arr[0], arr[1]) = makePair(); }
方案2:先做结构化绑定到临时变量,再手动赋值
如果确实需要用到结构化绑定的语法,可以先把返回值绑定到新声明的局部变量,再给数组赋值:
#include <utility> std::pair<int, int> makePair() { return { 10, 20 }; } int main() { int arr[20]; auto [a, b] = makePair(); arr[0] = a; arr[1] = b; }
这种写法适合后续还要用到a、b两个值做其他操作的场景,代码可读性更高。
内容的提问来源于stack exchange,提问作者Yossi
相关产品推荐
相关产品推荐

