Коли я використовую C ++ 11 auto
, якими є правила відрахування типу щодо того, чи буде воно перетворено на значення чи посилання?
Наприклад, іноді це зрозуміло:
auto i = v.begin(); // Copy, begin() returns an iterator by value
Це менш зрозуміло:
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?
// pointer
це насправді не потрібно. Крім того, те, що один компілятор видає цей результат, не означає, що він відповідає стандарту. ;) У цьому випадку це правильно, хоча можна дати кращі пояснення, що саме відбувається (виведений тип "занепав").