Tag: 通用引用

应该将C ++ 11中的所有/大多数setter函数写成接受通用引用的函数模板吗?

考虑一个具有N成员variables的类X ,每个variables都是可 复制的和可移动的 ,以及N相应的设置函数。 在C ++ 98中, X的定义可能如下所示: class X { public: void set_a(A const& a) { _a = a; } void set_b(B const& b) { _b = b; } … private: A _a; B _b; … }; 上面的类X Setter函数可以绑定到左值和右值参数。 根据实际的参数,这可能会导致创build一个临时的,最终会导致一个副本分配; 由于这个原因,这种devise不支持不可复制的types。 使用C ++ 11,我们可以移动语义,完美转发和通用引用(Scott Meyers的术语),通过以这种方式重写它们,可以更有效地使用setter函数: class X { public: template<typename T> void set_a(T&& a) […]

auto &&告诉我们什么?

如果你读的代码像 auto&& var = foo(); 其中foo是通过typesT的值重新调整的任何函数。 那么var是一个左值types的参数为T的左值。 但是这对var意味着什么? 这是否意味着我们被允许偷走var的资源? 有没有什么合理的情况下,当你使用auto&&告诉读者你的代码与你返回一个unique_ptr<>来告诉你拥有独占所有权一样吗? 当T是class级types时,例如T&&怎么办? 我只是想明白,如果有任何其他auto&&用例比那些模板编程中的那些,就像本文在Scott Meyers的Universal References中所讨论的那样。