为什么 fold 表达式不适用于 for 循环?

问题描述

以下来自an authoritative C++ proposal

template<class... TYPES>
constexpr void tuple<TYPES...>::swap(tuple& other)
{
    for...(constexpr size_t N : view::iota(0uz,sizeof...(TYPES)))
    {
        swap(get<N>(*this),get<N>(other));
    }
}

但是,我无法以相同的方式编译以下代码

#include <iostream>
#include <vector>

template<typename... Args>
void f(Args&&... args)
{
    for...(auto n : args) // error: expected '(' before '...' token
    {
        std::cout << n << std::endl;
    }
}

int main()
{
    auto v = std::vector{1,2,3};
    f(v,v,v);
}

见:https://godbolt.org/z/dEKsoqq8s

为什么折叠表达式不适用于 for 循环?

解决方法

因为折叠表达式是...表达式。 for 循环是一个语句... 解包适用于(一两个例外)表达式,而不适用于语句。

,

以下来自权威的 C++ 提案 [...]

提案只是一个提案。找到 ISO C++ 论文并不意味着该论文的内容已被 ISO C++ 标准接受。您在提案中找到的代码示例不保证有效,有时作者会故意使用伪代码来避免不必要的样板。

for... 是无效的 C++ 语法。您可以查看最新的标准草案 here 以了解该语言中的实际内容和内容。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...