Пространства имён
Варианты
Действия

std::modulus<void>

Материал из cppreference.com
< cpp‎ | utility‎ | functional
 
 
Библиотека утилит
Языковая поддержка
Поддержка типов (базовые типы, RTTI)
Макросы тестирования функциональности библиотеки (C++20)    
Управление динамической памятью
Программные утилиты
Поддержка сопрограмм (C++20)
Вариативные функции
Трёхстороннее сравнение (C++20)
(C++20)
(C++20)(C++20)(C++20)(C++20)(C++20)(C++20)
Общие утилиты
Дата и время
Функциональные объекты
Библиотека форматирования (C++20)
(C++11)
Операторы отношения (устарело в C++20)
Целочисленные функции сравнения
(C++20)(C++20)(C++20)    
(C++20)
Операции обмена и типа
(C++11)
(C++11)
(C++17)
Общие лексические типы
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
Элементарные преобразования строк
(C++17)
(C++17)
 
Объекты функции
Функции обёртки
(C++11)
(C++11)
Применение частичных функций
(C++20)(C++23)
(C++11)
Вызов функции
(C++17)(C++23)
Объект идентичности функции
(C++20)
Обёртки ссылок
(C++11)(C++11)
Прозрачные обёртки операторов
(C++14)
(C++14)
(C++14)
(C++14)  
(C++14)
modulus<>
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
Отрицатели
(C++17)
Искатели
Ограниченные компараторы
Старые привязки и адаптеры
(до C++17*)
(до C++17*)
(до C++17*)
(до C++17*)
(до C++17*)(до C++17*)(до C++17*)(до C++17*)
(до C++20*)
(до C++20*)
(до C++17*)(до C++17*)
(до C++17*)(до C++17*)

(до C++17*)
(до C++17*)(до C++17*)(до C++17*)(до C++17*)
(до C++20*)
(до C++20*)
 
Определено в заголовочном файле <functional>
template<>
class modulus<void>;
(начиная с C++14)

std::modulus<> является специализацией std::modulus с выведенным типом параметра и возвращаемого значения.

Содержание

[править] Типы элементы

Тип элементОпределение
is_transparent/* неопределено */

[править] Функции-элементы

operator()
возвращает модуль двух аргументов
(public функция-элемент)

std::modulus<>::operator()

template< class T, class U>

constexpr auto operator()( T&& lhs, U&& rhs ) const

  -> decltype(std::forward<T>(lhs) % std::forward<U>(rhs));

Возвращает остаток от деления lhs на rhs (или что-то ещё, для чего перегружен operator%).

Параметры

lhs, rhsзначения для деления

Возвращаемое значение

Результат lhs % rhs.

[править] Примечание

Тип элемент is_transparent указывает вызывающему объекту, что этот функциональный объект является прозрачным: он принимает аргументы произвольных типов и использует идеальную переадресацию, которая позволяет избежать ненужного копирования и преобразования, когда функциональный объект используется в разнородном контексте или с аргументами rvalue. В частности, шаблонные функции, такие как std::set::find и std::set::lower_bound , используют этот тип элемента в своих типах Compare.

[править] Пример

#include <functional>
#include <iostream>
 
struct M
{
    M(int x) { std::cout << "M(" << x << ");\n"; }
    M() {}
};
 
auto operator% (M, M) { std::cout << "operator% (M, M);\n"; return M{}; }
auto operator% (M, int) { std::cout << "operator% (M, int);\n"; return M{}; }
auto operator% (int, M) { std::cout << "operator% (int, M);\n"; return M{}; }
 
int main()
{
    M m1, m2;
 
    m1 % m2;
    m1 % 42;
    42 % m1;
 
    std::modulus<M>{}(m1, 42); // 42 преобразуется во временный M{42}
    std::modulus<> {}(m1, 42); // нет временного объекта, вызывается operator% (M, int)
    std::modulus<> {}(42, m1); // нет временного объекта, вызывается operator% (int, M)
}

Вывод:

operator% (M, M);
operator% (M, int);
operator% (int, M);
M(42);
operator% (M, M);
operator% (M, int);
operator% (int, M);