Я читал этот документ для шаблонов:
Руководство идиота по шаблонам C++. Часть 2
Я встретил одно определение, которое я не понял:
struct Currency
{
int Dollar;
int Cents;
operator double()
{
return Dollar + (double)Cents/100;
}
};
Он включает в себя определение функции operator double() внутри тела структуры.
Что именно это такое и что оно делает?
Сначала я подумал, что это функтор, но определение функтора выглядит так:
int operator ()
Достойная книга по C++ научит вас, что это оператор преобразования. Он позволяет использовать объекты типа Currency в качестве значения double. Подобные операторы неявного преобразования обычно встречаются нечасто и могут привести к неожиданным проблемам.
не будь идиотом и не доверяй тому, кто тебя так называет. Вместо этого попробуйте здесь: stackoverflow.com/questions/388242/…
В дополнение к приведенному выше описанию, это противоположность конструктора типа Currency(double);, который позволяет неявно преобразовывать double в Currency. Опять же, разрешение таких неявных преобразований может привести к проблемам.
статья ужасная, имхо. Их единственная мотивация обеспечить неявное преобразование в double заключается в том, что они хотят избежать написания правильной перегрузки <<, поскольку считают, что «проще» учить чушь, чем объяснять вещи правильно.
Кроме того, double для валюты не идеален...





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