如何解决具有嵌套初始化程序列表的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 bindings和range-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 的情况)的事实。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。