【发布时间】:2016-07-12 07:46:52
【问题描述】:
我一直在从事一个名为:C++11/14 的函数式编程特性的项目(针对我在大学的一门学科)。 关于这些主题有几个现有的资源和类似的演示文稿,我找到了一个 不久前,其中包含几个我还没有完全理解的代码 sn-ps(并且它们可以以某种方式连接到函数式编程)。片段A和B属于递归,C属于惰性求值。我想在下面与您分享:
片段 A:
#include <iostream>
template <int N>
struct Factorial {
static int const val = N * Factorial<N - 1>::val;
};
template <>
struct Factorial <0> {
static int const val = 1;
};
int main() {
int factorial_of_6 = Factorial<6>::val;
std::cout << factorial_of_6 << std::endl;
return 0;
}
这里的重点是编译时评估(为了避免运行时计算并提高性能)吗? 或者还有其他优势吗?
片段 B:
#include <iostream>
template <int ...>
struct my_sum;
template <>
struct my_sum <> {
static const int value {0};
};
template <int i, int ... tail>
struct my_sum <i, tail ...> {
static const int value = i + my_sum<tail ...>::value;
};
int main() {
int sum {my_sum<1, 2, 3, 4, 5>::value};
std::cout << sum << std::endl;
return 0;
}
同样的问题适用于上述。
这是另一个可能类似的 sn-p:
片段 C:
#include <iostream>
template <typename... Args>
void some_function (Args ...) {
std::cout << sizeof...(Args) << std::endl;
}
int main() {
some_function ("Every little thing gonna be alright...", 1.0 / 0.0);
return 0;
}
“演示文稿中说:C++ 是急切的,但以下将起作用。” 是不是在我不关心给定的表达式之前,我才能知道它们的数量?
请尽可能具体和详细,非常感谢您提前的耐心和帮助。 :)
【问题讨论】:
-
对于 C,args 不是惰性求值的。有评估(然后使用 as-if 规则进行优化可能会丢弃它们)。
标签: c++ c++11 recursion functional-programming variadic-templates