Der folgende Code zeigt, wie ein constexpr operator++()
(Pre-Inkrement) verwendet werden kann (live demo). Jetzt frage ich mich, ob es sinnvoll ist, einen Post-Inkrement-Operator als constexpr
zu deklarieren. Ich gehe davon aus, dass ein solcher Operator keine Nebenwirkungen hat und ähnlich wie im Beispiel verwendet wird. (Wenn dies zu abstrakt ist. Ich beabsichtige, meine bitset2 Klasse zu erweitern und will wissen, ob es ein Nutzen wäre, wenn die Post-Inkrementoperator constexpr
ist)Gibt es eine Anwendung für einen consExpr-Operator? ++ (int) (Post-Inkrement)
struct S {
constexpr S(int i) : m_i(i) {}
constexpr S & operator++() {
++m_i;
return *this;
}
int m_i;
};
int main() {
constexpr auto s1= ++S{3};
std::cout << s1.m_i << '\n'; // output: 4
}
'return bar;'. Warum referenzieren Sie doppelt "item" in der Schleife? Du bewegst nichts ... – JHBonarius
@ J.H.Bonarius reparierte die fehlende Rückkehranweisung. Und nein, ich bewege nichts, aber die bereichsbasierte for-Schleife erzeugt eine temporäre von der Dereferenzierung des Iterators, den ich über eine r-Wert-Referenz erfasse, anstatt den Wert zu kopieren. Es könnte sehr gut auf verschiedene andere Arten geschrieben werden. –
Ja, dein Beispiel überzeugt mich. Ich habe es auf mein erstes Beispiel angewendet ([link] (https://wandbox.org/permlink/6k8Vuq1rVl0yM1M9)). Das Entfernen von 'constexpr' für den Post-Inkrement-Operator wird nicht kompiliert. –