Предположим, что у нас есть класс Foo
с конструктором non explicit
от int
. Тогда для следующих функций:
Foo makeFoo1() { return 123; }
Foo makeFoo2() { return {123}; }
Я думаю, что makeFoo1
требует, чтобы Foo
copy/move ctor был доступен, и это возможно (хотя и маловероятно), что компилятор не удаляет копию и, следовательно, приводит к истинному копированию/перемещению.
Для makeFoo2
, поскольку мы используем инициализацию списка копий, копирование/перемещение не может произойти.
Должен ли я действительно беспокоиться об этом и вносить аргументы в non explicit
ctors в фигурные скобки, когда я могу (как в makeFoo2
)? (Скажем, если я автор библиотеки и ожидаю, что библиотека будет использоваться с подпарами-компиляторами для встроенной системы.)