Почему следующий код компилируется, хотя я передаю объект std::string
явному конструктору , который ожидает объект nlohmann::json
(в библиотеку)? Насколько я понимаю, std::string
не будет неявно преобразовано из-за ключевого слова * 1007.
explicit
в конструкторе A
просто означает, что конструктор A
должен быть называется явно (что вы). Компилятору разрешено использовать неявные преобразования при передаче аргументов в конструктор A
, если только они не используют типы, которые также являются explicit
(что не является конструктором nlohmann::json
).
Is Можно ли изменить мой код так, чтобы он успешно компилировался только при передаче nlohmann::json
?
Вы можете передать аргумент по неконстантной ссылке, не позволяя компилятору передавать неявно созданный временный объект:
struct A {
explicit A(nlohmann::json &json) {
}
};