当我使用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
并不是真正必要的。同样,仅因为一个编译器提供此输出并不意味着它符合标准。;)在这种情况下是正确的,尽管可以给出确切的解释(推导的类型为“衰减的”)。