я следующий класс (это не мой реальный класс, но только для целей иллюстрации):Потерялись подходящий конструктор
class Number {
public:
Number() : value_(0) {}
explicit Number(int v) : value_(v) {}
Number(const Number & other){
value_ = other.value_;
}
Number& operator=(const int & v){
value_ = v;
return *this;
}
private:
int value_;
};
я могу сделать следующее, и все они работают правильно:
void test_ok(){
Number x(3);
Number y = Number(3);
Number y2(x);
Number y3 = x;
Number u;
u = 3;
}
Однако следующие дает эту ошибку компилятора: нет подходящего конструктора не существует для преобразования из «ИНТ» в «Номер»
void test_error(){
Number z = 3;
}
Если я прокомментирую слово «явный» от второго конструктора, ошибка компилятора исчезнет, и, по-видимому, автоматическое преобразование работает нормально. Так как я хотел бы сохранить ключевое слово «Явным», какой конструктор мне не хватает?
Заранее благодарен!
Спасибо, поэтому я думаю, это просто невозможно. Мне просто интересно, какое преобразование по умолчанию использует компилятор, когда я удаляю ключевое слово, и если это можно было бы перегрузить. –
ramonvp
Неявное преобразование, которое вы разрешаете, удаляя ключевое слово 'explicit', - это ввести тип 3 в' Number'. Вы получаете такое же поведение, когда используете 'Number z = static_cast (3);' и в этом случае вы можете сохранить ключевое слово '' '' '' ', потому что хорошо .. вы явно обрабатываете typecast ;-) –