当我使用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
并不是必需的。而且,只因为一个编译器给出了这个输出,并不意味着它符合标准。;) 在这种情况下,虽然是正确的,但更好的解释是什么确切地发生了(推断类型被“衰减”了)。 - Xeoauto&& a = ...
和T&& b = ...
(在模板中)这样的声明将根据表达式的求值结果是左值还是右值而确定其左值或右值。 - Alex B