Cuando uso C++ 11 auto
, ¿cuáles son las reglas de tipo de deducción con respecto a si se resolverá con un valor o una referencia?C++ 11 semántica "automática"
por ejemplo, a veces es clara:
auto i = v.begin(); // Copy, begin() returns an iterator by value
Estos son menos claras:
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?
Tenga en cuenta que el '// puntero' no es realmente necesario. Además, el hecho de que un compilador proporcione esta salida no significa que se ajuste de manera estándar. ;) En este caso, es correcto, aunque se puede dar una mejor explicación de lo que sucede exactamente (el tipo deducido está "decaído"). – Xeo