Когда я использую C++ 11 auto
, каковы правила вычитания типа в отношении того, будет ли он решаться на значение или ссылку?C++ 11 «авто» семантика
например, иногда это понятно:
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?
Обратите внимание, что '// указатель' на самом деле не нужен. Кроме того, только потому, что один компилятор дает этот вывод, это не значит, что он соответствует стандарту. ;) В этом случае это правильно, хотя может быть дано лучшее объяснение, что именно происходит (выведенный тип «затухает»). – Xeo