...
class A
{
double var;
public:
explicit A(double var)
{
this->var = var;
}
};
...
A MyObj('a');
...
explicit конструктор
Код:
Подскажите пожалуйста, почему это возможно.
P.S. Компилятор MSVS.NET 2003, если это важно.
Explicit запрещает неявный вызов конструктора для преобразования типа:
Код:
A MyObj('a'); // здесь все ОК
A MyObj = 'a'; // а вот так при explicit нельзя
A MyObj = 'a'; // а вот так при explicit нельзя
но это же не хорошо, что конструктор double может фактически принять char и даже предупреждения не выскакивает. Есть ли способ это запретить?
только этот способ означает что будут не разрешены все конструкторы, прописанные в private. Предусмотреть все возможные варианты не так уж легко. А есть ли способ наоборот, то есть не то что указано запрещено, а то что явно не указано запрещено.
извиняюсь за такие вопросы, просто хочется разобраться до конца и потом не спотыкаться.
Код:
class A
{
private:
template<typename T> A(T);
public:
explicit A(double)
{
...
}
};
{
private:
template<typename T> A(T);
public:
explicit A(double)
{
...
}
};