Если я использую явный конструктор, нужно ли указывать ключевое слово в файлах .h и .cpp? - PullRequest
15 голосов
/ 08 ноября 2008

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

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

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

Ответы [ 2 ]

22 голосов
/ 08 ноября 2008

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

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

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

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

explicit foo::foo(int) {}
0 голосов
/ 08 ноября 2008

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

...