具有自动和结构化绑定的V3 zip范围 我希望能够使用C++范围来帮助通过拉链容器简化代码逻辑,而不是显式地索引它们。我可以用一个冗长的lambda参数来实现这一点,但我更愿意尝试用更自动的方法使它更简单/通用化 常数int n=。。。; std::载体an,bn,cn; …初始化a和b。。。 //这很有效 范围::每个 范围::视图::zipa、b、c、, []常量std::元组和v { 常数自动&[a,b,c]=v; c=a+b; std::cout
简单的回答是:如果你实际上不需要const,就不要使用const。你想修改一些东西,为什么要使用const?这很好:具有自动和结构化绑定的V3 zip范围 我希望能够使用C++范围来帮助通过拉链容器简化代码逻辑,而不是显式地索引它们。我可以用一个冗长的lambda参数来实现这一点,但我更愿意尝试用更自动的方法使它更简单/通用化 常数int n=。。。; std::载体an,bn,cn; …初始化a和b。。。 //这很有效 范围::每个 范围::视图::zipa、b、c、, []常量std::元组和v { 常数自动&[a,b,c]=v; c=a+b; std::cout,c++,tuples,c++17,auto,structured-bindings,C++,Tuples,C++17,Auto,Structured Bindings,简单的回答是:如果你实际上不需要const,就不要使用const。你想修改一些东西,为什么要使用const?这很好: ranges::for_each( ranges::views::zip(a, b, c), [](auto&& v) { auto&& [a, b, c] = v; c = a + b; } ); 与较短者一样: for (auto&& [a, b, c] : r
ranges::for_each(
ranges::views::zip(a, b, c),
[](auto&& v)
{
auto&& [a, b, c] = v;
c = a + b;
}
);
与较短者一样:
for (auto&& [a, b, c] : ranges::views::zip(a, b, c)) {
c = a + b;
}
中断的原因有点微妙。基本上,范围::for_每个都受到限制,这需要所有:
invocable<F &, iter_value_t<I> &> &&
invocable<F &, iter_reference_t<I>> &&
invocable<F &, iter_common_reference_t<I>> &&
因此,您的lambda将使用这三种类型进行实例化。其中一种类型iter_value_t&是tuple&。因此,当您使用const auto&进行结构化绑定时,每个绑定的类型都是const float。这就是为什么它不可赋值的原因。但这仅适用于特定的实例化,而不是在runtim调用的实例化总之是e。简单的回答是:如果你实际上不需要常量,就不要使用常量。你想修改一些东西,为什么要使用常量?这很好:
ranges::for_each(
ranges::views::zip(a, b, c),
[](auto&& v)
{
auto&& [a, b, c] = v;
c = a + b;
}
);
与较短者一样:
for (auto&& [a, b, c] : ranges::views::zip(a, b, c)) {
c = a + b;
}
中断的原因有点微妙。基本上,范围::for_每个都受到限制,这需要所有:
invocable<F &, iter_value_t<I> &> &&
invocable<F &, iter_reference_t<I>> &&
invocable<F &, iter_common_reference_t<I>> &&
因此,您的lambda将使用这三种类型进行实例化。其中一种类型iter_value_t&是tuple&。因此,当您使用const auto&进行结构化绑定时,每个绑定的类型都是const float。这就是为什么它不可赋值的原因。但这仅适用于特定的实例化,而不是在runtim调用的实例化无论如何。在[]const&v{…}中,v的类型在哪里?尝试添加auto作为那里的类型。哇,我有一个输入错误。它应该是[]const auto&v{…},这导致了范围::common\u tupleIn[]const&v{…}在哪里是v的类型?尝试添加auto作为那里的类型。哇,我有一个输入错误。它应该是[]const auto&v{…}这导致了范围::common_tuplePerfect!自从TBB在中使用const之后,我就一直在使用它,在尝试自动和完美时遇到问题!自从TBB在中使用它之后,我一直在使用const,在尝试自动时遇到问题&