Als Beispiel:Warum bewertet GCC constexpr nicht zur Kompilierzeit?
class something {
public:
static constexpr int seconds(int hour, int min, int sec)
{ return hour*3600+min*60+sec; }
}
dann:
printf("Look at the time: %d\n", something::seconds(10, 0, 0));
zu einem Aufruf der Funktion kompilieren mit g ++, anstatt einer konstanten Anzahl setzen. Warum würde g ++ das tun? Es hat keinen Gewinn und widerspricht irgendwie dem Zweck, conetexpr anstelle von schrecklichen Makros zu verwenden.
Welche Optimierungsflags verwenden Sie? –
@NeilButterworth sicherlich kann der Compiler den Aufruf Something :: Sekunden mit dem Ergebnis zur Kompilierzeit ersetzen? Was hat das damit zu tun, dass es ein Parameter für eine variadische Funktion ist? – Kevin
Kann nicht reproduziert werden. Geben Sie die g ++ - Version und die Optimierungseinstellung ein. In der Tat, auch ohne constexpr würde jeder vernünftige Compiler den Aufruf durch eine Konstante ersetzen. – SergeyA