Есть ли какая-либо причина для std:: multipies и std:: dives для третьего лица?

Сегодня мы обнаружили, что функторы для умножения и деления называются std::multiplies и std::divides, в отличие от, например, std::multiply и std::divide соответственно.

Это удивительно, если учесть, что std::plus и std::minus сформулированы не так.

Есть ли конкретная причина для разницы?

Ответы

Ответ 1

Похоже, это не что иное, как blooper: плюс и минус - даже не глаголы...

Само название не является оригиналом С++ 14: С++ 14 просто добавляет специализацию <void>, но типизированная версия и все остальные элементы заголовка <functional> существуют из С++ 98 (и даже pre-iso), и определенное соглашение о кодировании (функционирует как глаголы, объект как интерфейс подстановки как прилагательные...) еще не было уже установлено.

Что такое С++ 14, просто добавляет еще одну функцию к существующим определениям, позволяя существующему коду продолжать работать так, как есть. Он просто не может переопределять имена.

Считаем также, что знак + не всегда используется во всей стандартной библиотеке для add: in std::string это конкатенация, а std::plus, если применяется к строкам, объединяет их. Аналогично, * часто используется как операция "закрытия" (подумайте boost::spirit).

Более подходящая библиотека "с нуля", скорее всего, будет называть их нейтрально cross, dash, star и slash, позволяя классам, которые предоставляют соответствующие операции, давать им согласованные имена в своих собственных контекст