Quando uso C++ 11 auto
, quali sono le regole di deduzione del tipo per quanto riguarda la risoluzione di un valore o un riferimento?Semantica C++ 11 "auto"
per esempio, a volte è chiaro:
auto i = v.begin(); // Copy, begin() returns an iterator by value
Questi sono meno chiari:
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?
Si noti che il '// pointer' non è realmente necessario. Inoltre, solo perché un compilatore fornisce questo output non significa che sia conforme allo standard. ;) In questo caso è corretto, sebbene si possa dare una spiegazione migliore di ciò che accade esattamente (il tipo dedotto è "decaduto"). – Xeo