具有嵌套初始化程序列表的C ++结构化绑定

问题描述

有没有一种方法可以在C ++ 20中很好地编写以下代码 而不使用std :: array

for (const auto [x,y,z] : {std::array{1,2,3},{47,48,49},{100,200,300}})
{

}

好的,我的意思是更易读,更不垃圾内容,例如用元组代替数组并不是真正的改进。

解决方法

很好,我的意思是可读性更强,垃圾邮件更少

我想这是否是一个改进是有争议的(并且这句话引出了OP是否只能以基于意见的方式回答的问题?),但是由于它利用了新的C ++ 20功能,因此仍然可能对这个问题的读者有用。

您可以结合使用structured bindingsrange-based for loop初始化语句,将矩阵对象的初始化与结构化绑定循环的元素分开;例如:

for (const int matrix[3][3] = 
        {{1,2,3},{47,48,49},{100,200,300}};
     const auto [x,y,z] : matrix)
{
        // ...
}

for (const auto matrix = 
        {std::array{1,z] : matrix)
{
        // ...
}

for (typedef std::array<int,3> Row;
     const auto [x,z] : {Row{1,300}})
{
        // ...
}

最后一个示例利用了typedef declarations are init-statements(不是 alias-declarations 的情况)的事实。