Ersatz für veraltete register-Schlüsselwort von C++ 11
Habe ich gelesen (hier, zum Beispiel), die register
Schlüsselwort ist veraltet in C++ 11. Als solcher, gibt es ein äquivalent zu dieser storage-class-specifier in den neueren Versionen der standard, oder ist es die Betreuung durch den compiler?
- Es ist völlig unnötig, und nicht im Gegensatz zu
inline
. inline
ist immer noch notwendig für viele Compiler, die nur die Optimierung einer einzelnen übersetzungseinheit zu einem Zeitpunkt.- veraltet bedeutet nicht, es wurde entfernt. Für die Zeit, können Sie immer noch benutzen (aber keine Wirkung haben).
- Was ist die Korrelation zwischen
inline
und die Fähigkeit zu optimieren, mehrere TUs auf einmal? inline
können Definitionen in mehreren TUs, so dass die Funktion ist verfügbar für inlining, wo immer man es nennt. Ohne es, kann es nur eine definition in einer einzigen TU, und einige Compiler nicht in der Lage, inline-Aufrufe von anderen TUs.- Oh sicher. Ich sehe nicht, wie konnte ich das übersehen (ich hatte dieses problem vor kurzem.)
inline
ist nicht unnötig. Es ist nur missverstanden.- Einige gute Lektüre: drdobbs.com/keywords-that-arent-or-comments-by-anoth/184403859
- Ich merke...
- Siehe auch Herb Sutter ' s Artikel Keywords, die nicht
Du musst angemeldet sein, um einen Kommentar abzugeben.
Finden wir die Begründung für die veralteten registrieren in mängelbericht 809: Streichung der register-Schlüsselwort , die sagt (Hervorhebung von mir):
Den Entfernung registrieren für C++17 war zugelassen in der Lenexa treffen aber es ist immer noch reserviert für zukünftige Verwendung.
Wegen der als-ob-Regel der compiler hat nur zu emulieren, die beobachtbare Verhalten des Programms und damit die Optimierung kann über die als-ob-Regel halten Sie eine variable in ein register, wenn es nicht Effekt beobachtbaren Verhalten und vermutlich in den meisten Fällen die bessere Wahl, da es in der Regel mehr Informationen.
Referenz siehe auch Rolle der "register" - Schlüsselwort C? aus der
gcc
mailing-Liste, einer der Antworten in der thread schon sagt:War es nie eine Garantie, dass der compiler würde auf Sie hören, wenn Sie das Schlüsselwort (und in einigen Fällen, es wurde eine Garantie würde es ignorieren, Sie, wie wenn Sie nahm die Adresse).
Diese hinting-Fähigkeit ist jetzt veraltet, und es gibt keinen Ersatz (das ist standard. inline-asm ist nicht standard, aber könnte verwendet werden).
Ist die Annahme der compiler weisen Variablen zu den Registern besser als der Programmierer, so
register
ist veraltet und es gibt keine andere gleichwertige Schlüsselwort in dem neuen standard.Nur ein Hinweis, dass die Verwendung
JetBrains ReShaper
imVisual Studio 2015
wurde mir gesagtregister
Schlüsselwort ist veraltet inC++11
entfernt und inC++17
und schlug mir vor, es zu ersetzen mitauto
Schlüsselwort für dieses Stück code: