Нужно ли явно для CTOR с указателем типа?

Нужны ли нам explicit в этом случае:

class A
{
explicit A(B* b);
};

Я думаю, что даже если мы не пометим конструктор как explicit, это будет ошибка компиляции, чтобы написать:

A a = new B();

Неявное преобразование из указателя на объект вообще невозможно с помощью конструктора, верно?

1

Решение

Конвертировать не удастся из B* в A,

Это именно то, что явное предотвратит.

Вы должны просто написать A a( new B() ); в этом случае или если вы хотите быть реальным многословным, вы могли бы написать A a = A( new B() );

Что касается основного вопроса: вам это нужно или нет, это зависит от вас и вашей команды. Как правило, главный вопрос: есть ли у вас когда-нибудь конструктор ‘int’ (приведет к противоречивости с * типами), что вы хотите, и хотите ли вы, чтобы неявные преобразования происходили из аргументов конструкции или нет.

1

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

Вы делать нужен explicit если вы не хотите, чтобы этот конструктор использовался для неявных преобразований. Вполне возможно иметь неявное преобразование на основе конструктора, принимающее указатель.

1

Нужно ли явно для CTOR с указателем типа?

Это зависит от вас и вашей команды, если вы работаете в команде. Это скорее руководство по кодированию, чем что-либо еще. Язык не обязывает это.

0
По вопросам рекламы [email protected]