Если я использую явный конструктор, нужно ли поставить ключевое слово в файлы .h и .cpp?

На самом деле мой вопрос - все в названии. В любом случае:
У меня есть класс, и я использую явный конструктор:
.h

class MyClass
{
  public:
    explicit MyClass(const string& s): query(s) {}
  private:
   string query;
}

Обязательно или не нужно класть явное ключевое слово в файл реализации (.cpp)?

Ответы

Ответ 1

Нет, это не так. Ключевое слово explicit разрешено только в заголовке. Мой gcc говорит:

test.cpp:6: error: only declarations of constructors can be 'explicit'

для следующего кода:

class foo {
public:
    explicit foo(int);
};

explicit foo::foo(int) {}

Ответ 2

Перейдите к следующему вопросу (который вы действительно должны представить как отдельный вопрос), список инициализации идет с реализацией конструктора (его тело функции), который может находиться в заголовке или в файле cpp.