Ответ 1
Когда вы выполняете string { 50, 'x' }
, вы по существу инициализируете строку со списком символов.
С другой стороны, string(50, 'x')
вызывает конструктор 2 аргументов, который определяется для повторения символа x
50 раз. Причина, по которой string { 50, 'x' }
не выбирает конструктор, состоит в том, что он может быть неоднозначным. Что делать, если у вас тоже есть три конструктора параметров? Если тип имеет конструктор initializer_list
, он будет выбран, если вы используете { ... }
для инициализации.
В основном вам нужно знать о конструкторах вашего типа. Конструктор initializer_list
всегда будет иметь приоритет, чтобы избежать двусмысленности.