C++ 如何复制初始值设定项列表?

C++ 如何复制初始值设定项列表?,c++,c++11,C++,C++11,以下内容没有为我输出任何内容。据我所知,初始值设定项列表的生命周期非常有限,复制初始值设定项列表不会复制底层元素。我认为通过值传递将允许移动,即使是显式移动也不起作用。我不能将它绑定到引用,使用单独的引用变量在这里不起作用。即使使用向量也不起作用 template <typename T, typename Pred> void for_each(T t, const Pred& pred) { auto local = std::vector<typename

以下内容没有为我输出任何内容。据我所知,初始值设定项列表的生命周期非常有限,复制初始值设定项列表不会复制底层元素。我认为通过值传递将允许移动,即使是显式移动也不起作用。我不能将它绑定到引用,使用单独的引用变量在这里不起作用。即使使用向量也不起作用

template <typename T, typename Pred>
void for_each(T t, const Pred& pred)
{
    auto local = std::vector<typename T::value_type>{t.begin(), t.end()};

    for (typename decltype(local)::size_type i = 0; i < local.size(); ++i)
        pred(*(i + std::begin(local)));
}

void pred(char c)
{
    std::cout << c << " ";
}

int main()
{
    auto arr { 1, 2, 3 };
    for_each(arr, pred);

    return 0;
}
模板
每个(T T、const Pred和Pred)的无效
{
auto-local=std::vector{t.begin(),t.end()};
对于(typename decltype(local)::size_type i=0;istd::cout您的谓词是错误的:您传递的是
int
值,而不是
char
,因此您的谓词传递的是不可打印的字符0x01、0x02和0x03

您可以使用:

void pred(int c)
{
    std::cout << c << " ";
}

因为0x01、0x02和0x03都不是可打印的字符,所以看不到任何内容
template<typename T>
void pred(T c)
{
    std::cout << c << " ";
}
for (auto&& v : t)
    pred(v);