Ich denke, die Frage ist klar genug. Wird das auto
Schlüsselwort Konstanz automatisch erkennen oder immer einen Nicht-Konstantentyp zurückgeben, selbst wenn es z. zwei Versionen einer Funktion (eine, die zurückgibt const
und die andere, die dies nicht tut).
Nur zur Veranschaulichung, ich benutze const auto end = some_container.end()
vor meinen for-Schleifen, aber ich weiß nicht, ob dies notwendig ist oder sich sogar von normal unterscheidet auto
.
cbegin
undcend
geben Sie einenconst_iterator
by-Wert zurück.const auto
hat noch seinen Zweck und ist nicht redundant.const auto
Ist das in diesem allgemeinen Fall also nützlich?unterscheidet sich von
wie
unterscheidet sich von
Also benutze
const auto
undconst auto&
viel, genau wie du es tun würdest, wenn du es nicht hättestauto
.Die Überlastungsauflösung wird vom Rückgabetyp nicht beeinflusst:
const
oder neinconst
auf dem Wertx
hat keinen Einfluss darauf, welche Funktionen aufgerufen werdenexpr
.quelle
const
.Angenommen, Sie haben zwei Vorlagen:
auto
leitet den Typ ab und die Variable hat den gleichen Typ wie der Parameteru
(wie im// 1
Fall),const auto
macht die Variable zum gleichen Typ wie der Parameteru
im// 2
Fall. Alsoconst auto
einfachconst
Qualifikation erzwingen .quelle
Der Compiler leitet den Typ für das automatische Qualifikationsmerkmal ab. Wenn ein abgeleiteter Typ ist
some_type
,const auto
wird in konvertiertconst some_type
. Ein guter Compiler untersucht jedoch den gesamten Bereich derauto
Variablen und stellt fest, ob sich der Wert dieser Variablen irgendwo ändert. Wenn nicht, leitet der Compiler selbst den folgenden Typ ab:auto
->const some_type
. Ich habe dies in Visual Studio Express 2012 versucht und der erzeugte Maschinencode ist in beiden Fällen der gleiche. Ich bin mir nicht sicher, ob jeder Compiler dies tun wird. Es ist jedochconst auto
aus drei Gründen eine gute Vorgehensweise :const
zuauto
.quelle
const
fürauto
wenn es Programmfunktionalität nicht in irgendeiner Weise zu ändern . Dazu gehört auch die Überprüfung, ob konstante und nicht konstante Elementfunktionen verfügbar sind. Der Compiler wird es richtig machen.