std::not1()
的原型如下:爲什麼std :: not1()通過const引用而不是通過值引用參數?
template< class Predicate >
std::unary_negate<Predicate> not1(const Predicate& pred);
這有效地禁止移動語義。爲什麼沒有原型如下:
template< class Predicate >
std::unary_negate<Predicate> not1(Predicate pred);
這種方式,複製或移動取決於pred
是如何構建的。該功能只是將pred
移動到構造的std::unary_negate
對象。
他們可以爲rvalues添加額外的重載,但是當你有lambda時,沒有人真正關心那些非泛型助手。無論如何,他們很快就會取代接受'not_fn'的普遍引用。 –
@ hvd剛剛刪除'constexpr'並回退到C++ 03。 – Lingxi
@靈溪對我來說這似乎完全合理,謝謝。 – hvd