Код: Выделить всё
auto example_function(std::string_view filename) {
std::fstream ofile(filename, std::ios_base::out | std::ios_base::binary);
std::fstream ifile(filename, std::ios_base::in | std::ios_base::binary);
}
Код: Выделить всё
error: no matching function for call to ‘std::basic_fstream::basic_fstream(std::string_view&, std::_Ios_Openmode)’
error: ‘class std::basic_string_view’ has no member named ‘make_preferred’
= decltype(std::declval().make_preferred().filename())>
error: no matching function for call to ‘std::basic_fstream::basic_fstream(std::string_view&, std::_Ios_Openmode)’
error: ‘class std::basic_string_view’ has no member named ‘make_preferred’
= decltype(std::declval().make_preferred().filename())>
Я был удивлен, обнаружив, что ни один параметр не включает std::string_view. Есть ли какая-либо очевидная причина, по которой это не было включено?
Есть ли реальный способ компилировать этот код? Преобразование из std::string_view в const char* может быть не особенно безопасным, поскольку std::string_view не может быть завершено нулем в конце его .size().
Создание std::string, с другой стороны, приведет к дополнительному копированию и выделению.
Подробнее здесь: https://stackoverflow.com/questions/794 ... lename-arg
Мобильная версия