g++ 4.8.1: constantes Funktionszeigerarray optimieren
-
Warum optimiert der g++ 4.8.1 folgendes nicht weg?
void f() {] void g() {} const auto fa = {f,g}; int main() { for (func: fa) func(); }
-
Und kann mal jemand ausprobieren, ob der clang++ 3.3 es wegoptimiert?
-
clang macht da auch nichts.
Deshalb wird es vermutlich nicht wegoptimiert
// main.cpp [ dein code ] // wasanderes.cpp extern const auto fa; int x = (const_cast<initializer_list>(fa)={was, anderes}, 0);Änderst du main.cc in
constexpr void(*fa[])(void) = {f,g};oder
for (auto func: {f,g})optimiert clang das weg.
-
Danke. Sehe ich das richtig, dass der g++ 4.8.1 folgendes *nicht* wegoptimiert:
#include <iostream> using namespace std; int f() {return 5;} int g() {return 3;} int main() { int i = 0; for (auto func: {f,g}) i += func(); cout << i; }