Если я использую явный конструктор, нужно ли поставить ключевое слово в файлы .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.