#c #fstream #iostream
#c #fstream #iostream
Вопрос:
Я пытаюсь понять разницу между оператором ‘<<‘ и функцией ‘put ()’ для записи символов в выходной файл.
Мой код:
#include <fstream>
using namespace std;
int main() {
ofstream out ("output.txt");
int x = 1;
// This produces the incorrect result ...
out.put(x);
// ... while this produces the correct result
out << x;
// These two produce the same (correct) result
out.put('a');
out << 'a';
out.close;
}
Я понимаю, что out.put(x)
это преобразует целое число 1 в символ в соответствии с кодом ASCII, но я не понимаю, почему этого не происходит, когда я использую out << x
.
Однако out.put('a')
выдает то же out << 'a'
самое, что и .
Почему это так?
Комментарии:
1.
ostream::put()
выводит символ . Нет перегрузок дляint
или любого другого типа.2. Оператор
<<
as a streaming использует преобразование, вывод с учетом типов, языковой стандарт и язык, а также механизм преобразования, который является частью подсистемы ввода-вывода C . Некоторым людям не нравится это средство, потому что оно предоставляет довольно большую подсистему ввода-вывода для небольших программ.put
Метод обходит большую часть этого механизма, чтобы просто вывести заданный символ.
Ответ №1:
int x = 1;
// This produces the incorrect result ...
out.put(x);
Нет, он преобразует int
в a char
и выводит единицу char
со значением 1
.
// ... while this produces the correct result
out << x;
Это выполняет форматированный вывод и выводит представление значения x
. Скорее всего, он покажет символ 1
, который отличается от символа со значением 1
.
// These two produce the same (correct) result
out.put('a');
out << 'a';
Да, там нет преобразования. Вы сделали
int x = 'A';
out.put(x);
out << x;
Вы, вероятно, увидите A65
, откуда A
берется put(x)
и 65
из форматированного вывода, поскольку 65
часто это значение 'A'
.
Ответ №2:
Когда вы используете out << 1
, вы вызываете: operator<<(int val)
а не: operator<<(char val)
, тогда он может привести int
к std::string
.
Комментарии:
1. Средство вставки потока не выполняет преобразование из
int
вstd::string
. Он преобразуетint
значение в текст. Приведение — это то, что вы пишете в своем исходном коде, чтобы сообщить компилятору выполнить преобразование.