явный конструктор в std :: runtime_error

Согласно cplusplus.com, это реализация класса std :: runtime_error:

class runtime_error : public exception {
public:
explicit runtime_error (const string& what_arg);
};

Поскольку конструктор является явным, я ожидал, что он будет принимать только объекты std :: string.

throw std::runtime_error("error message");

Этот код компилируется (GCC), хотя. Разве компилятор не должен жаловаться на неявное преобразование const char * в const?

1

Решение

Это не то, что явно означает здесь. Может быть, проще всего это проиллюстрировать на примере:

struct Foo
{
explicit Foo(const std::string& s) {}
};

void bar(const Foo&) {}

int main()
{
Foo f("hello");                // OK: explicit construction from std::string
Foo f2 = std::string("hello"); // ERROR
std::string s;
bar(s);                        // ERROR
}

Здесь explicit Конвертирующий конструктор означает, что вы не можете неявно построить Foo из std::string, Но вы все еще можете построить std::string из const char*,

4

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector