Сбой кода при компиляции со строго соответствующим компилятором C ++ 03, потому что конструктор, который принимает std::string
, был добавлен только в C ++ 11.
Что касается вопроса, «был ли он основан на чем-то умном», поскольку интерфейс был добавлен , то можно сделать вывод, что для его пропуска не было технической причины.
Это дополнительное удобство, так как, если у вас есть std::string
, вы всегда можете вызвать .c_str()
, чтобы получить строку C, подходящую для использования со старым интерфейсом. (Как сказано в документации на C ++ 11, конструкторы, которые принимают std::string
, имеют точно тот же эффект, что и вызов соответствующего конструктора, который принимает const char*
с результатом вызова .c_str()
в строка.)