explicit try_to_lock_t() = default; };
struct adopt_lock_t { explicit adopt_lock_t() = default; };
Два вопроса: зачем явно дефолтить конструктор по умолчанию в пустой структуре? И зачем его же делать explicit?
Может я чего-то не понимаю...
explicit, чтобы нельзя было сделать void foo(adopt_lock_t) foo({})
Хм... А когда есть смысл делать подобное для конструкторов с несколькими аргументами? Если вообще есть
чтобы вынудить явно писать тип, explicit же
Наверное здесь явно его задефолтили, чтобы написать explicit
Да, с дефолтом понятно теперь
Смысл тот же, если не хочешь, чтобы {"spam", 42} превращалось в Foo
Теперь всегда, когда не хочется чтобы конструктор участвовал в преобразовании типов
Разве это не про конструктор с одним аргументом?
Уже нет. С 17го кажется.
А можно пример? Не совсем понимаю как это должно выглядеть
Кстати, если спросишь, почему - я забыл....
Выше же дали пример с пустым initializer list, чем хуже будет такой же пример, но с 2-3 значениями внутри?
Ааа, имеется ввиду преобразование, когда аргументом является класс с таким конструктором? Я думал речь идет о неявном преобразовании в класс (а-ля не-explicit A::A(int))
Потому и спросил про один аргумент
В класс, точнее, в его экземпляр
Обсуждают сегодня