Ich habe an einem Projekt mit dem Namen: Funktionale Programmierfunktionen von C++ 11/14 (für eines meiner Fächer an der Universität) gearbeitet. Es gibt mehrere bestehende Quellen und ähnliche Präsentationen über solche Themen und ich fand eine nicht so lange her, die mehrere Code-Schnipsel, die ich nicht vollständig verstanden habe (und irgendwie können sie mit der funktionalen Programmierung verbunden sein) enthalten. Schnipseln A und B gehörte Rekursion und C gehörte lazy evaluation. Ich möchte sie unten mit Ihnen teilen:C++ funktionale Programmierung Code-Schnipsel
Snippet 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;
}
war der Punkt hier die Zeitauswertung kompilieren (um Laufzeit Berechnungen zu vermeiden und die Leistung zu verbessern)? Oder gibt es noch andere Vorteile?
Snippet 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;
}
Gleiche Frage wie oben gilt.
Und hier ist eine andere Schnipsel, die vielleicht ähnlich ist:
Snippet 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;
}
"Die Präsentation sagte: C++ ist bestrebt, aber die folgenden funktionieren wird." Ist es der Punkt, dass, bis mir die angegebenen Ausdrücke egal sind, ich die Menge von ihnen erzählen kann?
Bitte seien Sie so spezifisch und detailliert wie möglich, und vielen Dank für Ihre Geduld und Hilfe im Voraus. :)
Für C, Args sind nicht faul ausgewertet. Es wird ausgewertet (dann kann die Optimierung mit * as-if * -Regel sie verwerfen). – Jarod42