autoWelche Regeln gelten für die Typableitung bei Verwendung von C ++ 11 hinsichtlich der Auflösung in einen Wert oder eine Referenz?
ZB manchmal ist es klar:
auto i = v.begin(); // Copy, begin() returns an iterator by value
Diese sind weniger klar:
const std::shared_ptr<Foo>& get_foo();
auto p = get_foo(); // Copy or reference?
static std::shared_ptr<Foo> s_foo;
auto sp = s_foo; // Copy or reference?
std::vector<std::shared_ptr<Foo>> c;
for (auto foo: c) { // Copy for every loop iteration?
// pointernicht wirklich notwendig ist. Nur weil ein Compiler diese Ausgabe liefert, bedeutet dies nicht, dass sie standardkonform ist. ;) In diesem Fall ist es richtig, obwohl eine bessere Erklärung gegeben werden kann, was genau passiert (der abgeleitete Typ ist "verfallen").