关于C++中的cout

最近恰好看到qq群里有讨论cout的问题,发现自己对于cout的运行机制也不怎么明白,所以就仔细研究了下这个东西。

如下是c++ reference中cout的定义

extern ostream cout;

先说下问题吧,如图所示这两行代码在vs中是无法编译的,因为ostream没有对于stringstream类型的<<操作符重载

  

我在ostream中加入了以下代码:

如下图所示,这时候错误就消失了,当然还是没法编译成功,毕竟改了原生的c++头文件,没改库文件。

typedef basic_stringstream<char, char_traits<char>,
	allocator<char> > stringstream;

其实我一直在奇怪stringstream继承自ostream,按理来说ostream内部不用专门去重写针对stringstream的<<操作符,大概是因为basic_stringstream是模板的原因,这个我还需要深究以下。

时间: 2024-10-17 06:04:11

关于C++中的cout的相关文章

Qt中使用cout, cin, cerr

在Qt中,用的最多的是GUI页面,但GUI比较慢,有些小的试验不妨先用console,当然在Qt里面可以直接使用cout, cin这些. 不过可能不会兼容Qt自带的一些类型,比如QByteArray等类型.在网上找了一下,发现可以用如下的方法来进行输出. 首先需要包含下列头文件: #include <QTextStream> #include <stdio.h> 然后,在使用cin.cout.cerr之前,创建下列变量: QTextStream cin(stdin,  QIODev

C++中的cout输出机制

代码: 1 #include <iostream> 2 3 using namespace std; 4 5 int hello(){ 6 cout<<"hello"<<endl; 7 return 0; 8 } 9 10 int main(){ 11 int a = 1; 12 cout<<"a="<<hello()<<a<<endl; 13 14 return 0; 15 } 输

在QT程序中使用cout和cin

1先输入10个数字,再输出. [cpp] view plaincopyprint? #include <QtCore/QCoreApplication> #include <QtCore/QList> #include <QTextStream> int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); QTextStream cin(stdin, QIODevice::ReadOnly);

C++ 多线程中使用cout还是printf

在多线程的设计模式下,如果多个线程都使用cout打印信息,那么很容易出现内容交替的现象,例如下图: 代码如下: 如果把cout替换成printf,那么就不会出现这个问题,运行结果如下图: 对应代码如下: 上网搜索了下相关的内容,部分网友反馈结果是: cout不是线程安全的,要靠自己去线程同步,比较麻烦 .printf是线程安全的,也就是自己做了线程同步的处理. 这个结果有待继续考证,暂且记在这. 发现一篇对IOstream解释得比较好的文章,有一定的参考价值:http://www.cnblogs

c++ - 在终端中,cout不显示任何内容

g++ 是一个编译器,它将源代码转换成可以执行程序,但不运行它. 你必须亲自运行程序. g++ 生成的程序的默认名称是 a.out ( 因为历史原因),因此你将运行它作为 $./a.out   如果要为程序选择不同的名称,请使用 -o 选项: $ g++ Code.cpp -o myProgram $./myProgram   下面是我写你的程序的方法: #include <iostream> int main() { std::cout <<"Hello Worldn&

定义一个由整数组成的数组,然后输入一个整数X,如果X不在此数组中,返回小于X的最大数的位置i和大于X的最小数的位置j

//定义一个由整数组成的数组,然后输入一个整数x,如果X不在此数组中,返回小于X的最大数的位置i和大于X的最小数的位置j: //若X在此数组中,则返回数组中这个数的位置. 源代码: #include<iostream> using namespace std; void main() { int array[]={1,2,3,4,5,6,7,89,45,32,56,78,12,43,90,19};//16个数字 int x; int max=array[0]; int min=array[0]

cout、cerr、clog有何区别?

windows+vs情况下:在控制台上,cout能重定向到文件,cerr和clog不能.输出重定向到文件实际上就是一个管道的一头连输出流,另一头连文件输入流 cout具有自己的缓冲区,当缓冲区满或遇到endl会刷新终端(默认是屏幕):cerr没有缓冲区,直接刷新终端 cout的写缓存操作和系统刷新终端的操作是异步的,所以会存在当程序崩溃的情况下按代码执行顺序应该输出的内容可能只输出了一部分,而不是全部输出,因为这个时候程序已经崩溃了 cout.printf其实是写缓存.这就存在一个问题,当缓冲区

c++ cout&lt;&lt; cin&gt;&gt; 注释符 详解

std::cout是在#include<iostream>库中的ostream类型中的对象 std::表示命名空间,标准库定义的所有名字都在命名空间std中 std::cout是在#include<iostream>库中的istream类型中的对象 std::cout<<a<<std::endl; 上条语句中<<是输入运算符,就是将大头的那边的量弄进箭头所指的对象中,并返回运算之后的箭头所指的对象 std::endl是一个操纵符,作用是结束当前行

C/C++中浮点数输出格式问题

在C语言中,浮点数的输出格式有三种:%g, %f, %e 首先要说的是%e是采用科学计数法来显示. %g与后两者有一个重要的差别,就是设置输出精度的时候,(C中默认浮点输出精度是6),%g认为,包括整数位在内,输出6位就行, 而%f %e认为,这6位是指小数点后面的精度是6位. 在C++中,cout使用setf来设置的输出格式,也有三种模式专门对应C语言中的这三种情形:default, fixed, scientific