Для чего нужен explicit?
Почему нельзя просто его убрать и инициализировать объект неявно?
Явное лучше неявного. 
Взял для себя правило помечать все конструкторы как explicit. Негативных эффектов не знаю, но не отстрелить ногу в будущем немного поможет.
Если вы определяете конструктор принимающий один и только один аргумент, такой конструктор будет использоваться для неявного приведения из типа аргумента в тип вашего класса. Используйте explicit, если хотите изменить это поведение.class Foo
{
public:
    Foo(int v) : _v(v) {}
private:
    int _v;
};

class Bar
{
public:
    explicit Bar(int v) : _v(v) {}
private:
    int _v;
};

void baz(Foo foo) {/* some code */}
void qux(Bar bar) {/* some code */}

int main()
{
    Foo foo = Foo(4);
    Bar bar = Bar(4);

    baz(foo); // Ok.
    baz(4);   // Ok.
    qux(bar); // Ok.
    qux(4);   // Fail.
}