Явное преобразование с Назначением

Простой класс с явным конструктором преобразования.

class MyDouble {
double d;
public:
MyDouble() : d(0) {}
explicit MyDouble(double d_) : d(d_) {}
MyDouble & operator =(double d_) {
d = d_; return *this;
}
};

Я специально добавляю задание, чтобы его можно было сконструировать из double,

MyDouble a;
a = 1.1;                    // this works
MyDouble b = MyDouble(1.1); // this works
MyDouble c(1.1);            // this works
MyDouble d = 1.1;           // this does not work

Я не хочу неявного преобразования, потому что это вызовет некоторые другие проблемы. Но я все еще хочу работу прямого назначения, но это не так. В любом случае, чтобы сделать последнее заявление MyDouble d = 1.1; работать без удаления explicit ключевое слово.

1

Решение

Ответ на ваш вопрос «нет», нет возможности разрешить MyDouble d = 1 .; без удаления явного.

Вы можете просто использовать MyDouble d (1.); или MyDouble d {1.}; вместо использования присваивания-инициализации. Это позволит вам сохранить явное, а также будет ясно, что вы инициализируете.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector