Явный модификатор для конструкторов, принимающих ссылочный аргумент

Я читал, что рекомендуется определять конструкторы с одним аргументом explicit, чтобы избежать неявных преобразований. Я понимаю ловушку повышения значения int до объекта класса. Интересно, относится ли это также к конструкторам, принимающим ссылочные типы. Как можно спровоцировать неявное преобразование в этом случае:

class Foo
{
public:
    Foo(Bar& bar) { }
};

Изменяется ли ситуация, если конструктор принимает указатели, возможно ли преобразование из NULL и nullptr?

class Foo
{
public:
    Foo(Bar* bar) { }
};

person tommyk    schedule 24.06.2015    source источник


Ответы (1)


Да обоим. Функция с подписью

void acceptFoo(const Foo& foo)

заставит компилятор создать Foo, если вы передадите туда Bar.

То же самое для 0 и nullptr.

person Alexander Balabin    schedule 24.06.2015