Объявление операторной функции внутри структуры

Я читал этот документ для шаблонов:

Руководство идиота по шаблонам C++. Часть 2

Я встретил одно определение, которое я не понял:

struct Currency
{
  int Dollar;
  int Cents;

  operator double()
  {
    return Dollar + (double)Cents/100;
  }
};

Он включает в себя определение функции operator double() внутри тела структуры.

Что именно это такое и что оно делает?

Сначала я подумал, что это функтор, но определение функтора выглядит так:

int operator ()

Google «Оператор преобразования». И operator() не является «функтором», это перегруженный оператор вызова функции. Весь класс/структура, содержащая его, является функтором.

HolyBlackCat 26.03.2024 17:33

Достойная книга по C++ научит вас, что это оператор преобразования. Он позволяет использовать объекты типа Currency в качестве значения double. Подобные операторы неявного преобразования обычно встречаются нечасто и могут привести к неожиданным проблемам.

Some programmer dude 26.03.2024 17:33

не будь идиотом и не доверяй тому, кто тебя так называет. Вместо этого попробуйте здесь: stackoverflow.com/questions/388242/…

463035818_is_not_an_ai 26.03.2024 17:34

В дополнение к приведенному выше описанию, это противоположность конструктора типа Currency(double);, который позволяет неявно преобразовывать double в Currency. Опять же, разрешение таких неявных преобразований может привести к проблемам.

Some programmer dude 26.03.2024 17:34

статья ужасная, имхо. Их единственная мотивация обеспечить неявное преобразование в double заключается в том, что они хотят избежать написания правильной перегрузки <<, поскольку считают, что «проще» учить чушь, чем объяснять вещи правильно.

463035818_is_not_an_ai 26.03.2024 17:38

Кроме того, double для валюты не идеален...

Jarod42 26.03.2024 17:58
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
7
77
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

operator double() делает экземпляр Currency неявно конвертируемым в double. Вот два примера использования operator double():

Currency cur{1, 2};

double d = cur; // this works, d is now 1.02

std::cout << cur << '\n'; // and even this (and prints 1.02)

Другие вопросы по теме