Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有自动和结构化绑定的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 - Fatal编程技术网

具有自动和结构化绑定的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

具有自动和结构化绑定的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

简单的回答是:如果你实际上不需要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] : 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,在尝试自动时遇到问题&