cout.put()是否比cout<<更适合打印字符?

4

背景

据我所知,在 C++ 的 Release 2.0 版本中,单个字符常量的类型被存储为 char,而不是 int。但在此之前,类似于下面这样的语句:

cout<<'A'

之前存在问题,因为它显示的是 'A' 的 ASCII 值,即 65,而:

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

将会显示正确的值,即'A'。

由于这个问题已经在版本2.0中得到修复,我相信cout.put()失去了它优于cout<<的优势。


问题

除了打印字符外,是否有其他原因推荐使用cout.put()而不是cout<<


1
没有所谓的“C++ 2.0”。另外,'A'始终是一个char类型,我不知道你在使用什么样的编译器,但如果你在处理这样的问题时遇到麻烦,那么它一定是古老且完全过时的... - AliciaBytes
1
@RaphaelMiedl:是的,有的。它现在已经大约27岁了。 - Benjamin Lindley
@BenjaminLindley 这是预标准阶段的内容。所以我们在谈论一个已经完全过时的特定实现?就像有些人把“Turbo C++ 3.1”简称为“C++ 3.1”一样。 - AliciaBytes
@RaphaelMiedl:嗯,不是很准确。它是由该语言发明者定义的官方C++规范。当然已经过时了。 - Benjamin Lindley
2
C++ Release 1.0 发生在三十多年前。它已经成为化石,是博物馆中的展品。如果你在野外遇到这个物种,请立即联系我们,我们想研究仍在使用它的组织的生命周期。如果你的目标是 Release 1.0 或 2.0,你不太可能在这里找到答案。当它完全过时时,大多数此网站上的用户可能还没有出生。 - n. m.
显示剩余2条评论
1个回答

9
< p >cout<<和cout.put或者说是重载的<<运算符和std::basic_ostream中的put方法之间有一些区别,因为这不仅限于全局实例:cout。

<< 运算符写入格式化输出,put方法则不会。

<<运算符在输出失败时设置failbit标志,put方法则不会。

个人认为,在几乎所有情况下我都会选择<<运算符,除非我有特定的需求需要绕过格式化输出或在错误时不设置failbit标志。

使用它们可能导致以下输出差异:

#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`的情况没有被设置,这可能更为关键。

很好:我并没有特别关注格式方面。感谢您提供有关failbit的信息。 - sjsam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接