1

我环顾网络以了解这些高度简单易用的表达式是如何在幕后实现的,但我找不到与这些表达式的实现相关的任何内容。

例如:

template<typename ...Types>
struct my_struct {
    static_assert((std::is_integral<Types>::value && ...), "All types must be integrals");
};

或者:

template <typename T>
auto func1(const T param) {
    return paramm * (param + 1);
}

template <typename ...Types>
auto func2(const Types... params){
    return (func1(params) + ...);
}

我只在 C++11 和 C++14 中找到了递归方式,但我找不到任何关于编译器理解这些表达式的智能方式。

我将尝试更好地解释我的问题:

在将折叠表达式编译为汇编之前,编译器是否将折叠表达式转换为更简单的 C++ 代码(如果是,它是递归发生还是在常规循环中发生)?

询问将可变参数表达式编译成汇编的一般方法可能会更好,但在 C++11/C++14 中,它比 C++17 中的折叠表达式更接近 C 语法。用低级语言实现它看起来并不简单。

要更多地关注这个问题——如果可能的话,并且您知道具有此功能(折叠表达式)的开源编译器,请将您的答案参考这个编译器(尽管如果存在,我会寻找更一般的答案)。

4

0 回答 0