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, но никто не заботился об этих негритянских помощниках, когда у вас есть лямбда. И скоро они заменили бы универсальной ссылкой, принимающей 'not_fn' в любом случае. –
@hvd Просто удалил 'constexpr' и отступил на C++ 03. – Lingxi
@Lingxi Это кажется мне совершенно разумным, спасибо. – hvd