Определяемая пользователем функция преобразования, которая делает возможными следующие инициализации в вашем коде:
Pocket mynumbers1[] = { 3, 9, 2, -4, 4 };
Pocket mynumbers2[] = { 3, 9, 5, 0, 4 };
также будет использоваться компилятором при вызове transform
при применении minus
к заданномудиапазон:
transform(v1.begin(), v1.end(), v2.begin(), v3.begin(), minus<Pocket>());
Если вы удалите функцию преобразования operator int() const
, ни инициализация, ни преобразование не сработают.
Однако, если бы вы сделали функцию преобразования explicit
, это будет работать для инициализации, но не для transform
.См. Демо здесь .
Соответствующий раздел в стандарте для этого:
15.3.2 Функции преобразования [class.conv.fct]
...
2. Функция преобразования может быть явной, и в этом случае она рассматривается только как пользовательское преобразование для прямой инициализации.В противном случае пользовательские преобразования не ограничиваются использованием в присваиваниях и инициализациях.