2016-06-19 2 views
2

фонали cout.put() рекомендуется более соиЬ << для печати символов

IIRC, из сохраняет Release 2.0 C++ константы односимвольной как тип char и NOT int. Но прежде, чем Release 2.0 заявление как

cout<<'A' 

было проблематично, поскольку она отображает значение ASCII в 'A' т.е. 65, тогда:

char ch='A'; 
cout<<ch; 

будет отображать правильное значение, т.е. 'A'.

Поскольку проблема была устранена в Версия 2.0. Я считаю, cout.put() потерял преимущество, которое у него было более cout<<.


Вопрос

Есть ли другая причина для рекомендации cout.put() над cout<< для печати символов?

+1

Нет «C++ 2.0».Также '' A'' всегда был 'char', я не знаю, какой компилятор вы используете, но если у вас возникли проблемы с чем-то подобным, он должен быть древним и полностью устаревшим ... –

+1

@ RaphaelMiedl : Да, есть. Сейчас около 27 лет. –

+0

@ BenjaminLindley, который является предварительным. поэтому мы говорим о конкретной реализации, которая полностью устарела? Точно так же некоторые люди называют «Turbo C++ 3.1» просто «C++ 3.1»? –

ответ

6

Есть несколько различий между cout<< и cout.put, или мы должны сказать перегруженный << оператора и put метода из std::basic_ostream, потому что это на самом деле не ограничиваются глобальным экземпляром: cout.

Оператор << пишет форматированный выход, метод put этого не делает.

Оператор << устанавливает сбои в случае сбоя выхода, метод put не использует.

Лично я хотел бы обратиться к оператору << практически во всех случаях, если у меня не было особых требований обходить форматированный выход или не устанавливать ошибку при ошибке.

С их помощью можно привести следующие отличия выхода:

#include <iostream> 
#include <iomanip> 

using namespace std; 

int main() { 
    cout << "Character: '" << setw(10) << 'A' << setw(0) << "'" << endl; 
    cout << "Character: '" << setw(10); 
    cout.put('A'); 
    cout << setw(0) << "'" << endl; 
    return 0; 
} 

Выходы:

Character: '   A' 
Character: 'A' 

Смотрите выше в действии: http://ideone.com/9N0VYn

Поскольку метод put не отформатирован это делает не соблюдайте набор манипуляторов, могут быть ситуации, когда это действительно то, что вы намереваетесь. Но поскольку похоже, что вы хотите распечатать персонажа, я бы предпочел оператор <<, который уважает форматирование.

И тогда есть случай failbit, который не устанавливается, и это может быть даже более важным.

+0

. Ничего. Однако я не особо концентрировался на аспекте форматирования. Спасибо за этот бит на failbit – sjsam

Смежные вопросы