cstdio vs fstream [закрыто]

Сравнивая две библиотеки файловых потоков, таких как cstdio и fstream, я делаю вывод, что они делают одно и то же. Я изучаю C ++. Есть ли лучший вариант продолжить «эволюцию» языка и продолжить с fstream? Единственное, что я думаю, отличается тем, что в cstdio есть функции переименования и удаления для переименования и удаления файлов. Можно ли это сделать с помощью fstream?

-1
задан 11.04.2017, 19:03
1 ответ

stdio (или cstdio) - librer¦ - в полученная в наследство C в то время как fstream - librer¦ - в привилегию C ++. Â: Ты отличаешься? несколько (я перечисляю какие-то тебе):

  • stdio получен в наследство C в то время как fstream собственный C ++
  • librer¦-схвати их выпяченного ввода собственные C ++ они позволяют абстрактное использование и homogéneo Вашей функциональности
  • librer¦-схвати их собственные C ++ они растяжимые
  • librer¦-схвати их собственные C ++ они могут использовать iomanip

stdio она получена в наследство C в то время как fstream собственный C ++

В stdio encontrarÃ: s colecci¦n функций (не классы), подумавшие, чтобы работать с вводом / выводом, в то время как в fstream то, над чем они господствуют, это классы (это из-за чего-то librer¦ - в собственную C ++). Librer¦-схвати

выпяченного ввода собственные C ++ они позволяют абстрактное использование и homogéneo Вашей функциональности

после того, как являются основана на классах, и благодаря тому, что эти классы обладают наследством, возможно осуществлять механизмы выпяченного ввода независимый от того источника или конечной судьбы данных:

// ¿el destino es un fichero? ¿sera la consola? ¿quizas una impresora?
void PrintDatos(std::ostream& out)
{
  out << "abcdefg";
}

Этот caracter¦-stica помогает повторно использовать c¦digo. Стой, если, какой-либо я dirÃ: что с stdio también возможно делать:

fprintf(stdout,"abcdef");

Различие estÃ: в этом случае, в котором использовать этот caracter¦-stica с stdio мы будет запрещать использовать prÃ: cticamente половина функциональности, предложенной счастьем librer¦ - в, так как функции, которые они не допускают как parÃ: метр ввода один FILE* они не будут мочь быть использованными в этом контексте. Это último проверяет с librer¦-экспертом собственные C ++, что не теряют функциональность. Librer¦-схвати собственные

C ++ они растяжимые

, Что fstream был librer¦ - в собственную C ++, подразумевает, что есть diseñado думая о собственных caracter¦-sticas C ++ то, что подразумевает, что, например, Ваша функциональность растяжимая посредством наших собственных перегрузок:

struct Test
{
  int valor;
  char caracter;

  Test(int v, char c)
    : valor(v), caracter(c)
  { }
};

std::ostream& operator<<(std::ostream& out, Test const& test)
{
  return out << test.valor << test.caracter; 
}

int main()
{
  std::vector<Test> lista { {1,'a'},{2,'b'},{3,'c'},{4,'d'} };

  for( auto& test : lista )
    std::cout << test;
}

Один diseño сходный ser¦ - в немыслимый с stdio или, по крайней мере, ser¦ - в mÃ: s великолепный программирования и менее натуральный, что generar¦ - в c¦digo mÃ: s сложный для того, чтобы быть прочитанным. Librer¦-схвати собственные

C ++ они могут использовать iomanip

Другой интересный caracter¦-stica выпяченного собственного ввода C ++ состоит в том, что возможно использовать librer¦ - в iomanip, чтобы конфигурировать c¦mo, будет переворачиваться informaci¦n. Этот caracter¦-stica сама не вносит большую вещь, но когда сочетаются с предыдущими caracter¦-sticas, позволяет получать достаточно элегантные решения:

std::cout << std::setw(10) << std::setfill('#') << 45;

Conclusi¦n

stdio существуй bÃ: sicamente, потому что C ++ был в Ваших началах вид C слегка vitaminado. Según C ++ он расстегнулся Вашего предшественника он приобретал librer¦-туз собственные для его собственных интересов.

В настоящее время stdio служит mÃ: s как librer¦ - в совместимости, чтобы мочь приносить в C ++ c¦digo C. Если estÃ: s делая c¦digo ново предпочтительно использовать librer¦-схвати их собственные C ++.

5
ответ дан 30.10.2019, 03:16