auto
(in dem Kontext, in dem es einen Typ ableitet) beschränkt auf den Typ einer Variablen, für die es einen Initialisierer gibt. decltype
ist ein breiteres Konstrukt, das auf Kosten zusätzlicher Informationen auf den Typ eines Ausdrucks schließen lässt.
In den Fällen, in denen auto
verwendet werden kann, ist es prägnanter als decltype
, da Sie nicht den Ausdruck angeben müssen, aus dem der Typ abgeleitet wird.
auto x = foo(); // more concise than `decltype(foo()) x`
std::vector<decltype(foo())> v{ foo() }; // cannot use `auto`
Das Schlüsselwort auto
auch in einem völlig anderen Kontext verwendet wird, wenn für Funktionen Rückgabetypen Hinter mit:
auto foo() -> int;
Es auto
ist nur ein Führer, so dass der Compiler weiß, dass dies eine Erklärung mit einem abschließenden Rückgabetyp. Während das obige Beispiel kann trivialerweise in der generischen Programmierung alten Stil, umgewandelt werden ist es sinnvoll:
template <typename T, typename U>
auto sum(T t, U u) -> decltype(t+u)
Beachten Sie, dass in diesem Fall auto
nicht den Rückgabetyp zu definieren, verwendet werden kann.
@JesseGood Bevor ich die Frage stelle, lese ich diesen Thread und bin auf der Suche nach einer saubereren Erklärung –
Ähnliche Fragen: [1]: http://stackoverflow.com/questions/11459928/equivalence-between-decltype-and- auto [2]: http://stackoverflow.com/questions/6869888/the-relationship-between-auto-and-declype – crnlx
@ JamesLeonard: Okay, nun, ich kenne keine bessere Erklärung [als die von Scott Meyers] (http: // cpp-next.com/archive/2011/04/erscheinen-und-verschwinden-costs-in-c /). –