一个很弱的C++问题

来源:百度知道 编辑:UC知道 时间:2024/06/15 12:55:20
#include <iostream>
using namespace std;
int main()
{
int i=7;
ostream *o;
*o <<i;
}
这个程序为什么是错的呢?顺便解释一下为什么不能
ostream o;
而只能ostream *o;
还有 cout是指针还是对象还是什么
谢谢大牛们指点
我知道用cout就好,可是由于其它情况下会需要知道这个问题的答案,所以还请大牛们耐心解答,谢谢

啊,这个很简单的。
ostream *o;
*o <<i;
我们来分析一下。
首先,如果你看到了<iostream>,你会发现它是多么复杂的定义了:
__PURE_APPDOMAIN_GLOBAL extern _CRTDATA2 istream cin;
__PURE_APPDOMAIN_GLOBAL extern _CRTDATA2 ostream cout;
__PURE_APPDOMAIN_GLOBAL extern _CRTDATA2 ostream cerr;
__PURE_APPDOMAIN_GLOBAL extern _CRTDATA2 ostream clog;
其次,你的指针啊:
ostream *o;
o到底是什么!!!!!!!!!!!!!
你什么也不知道。
说明一点:
ostream *o=&cout;
很抱歉,仍然是错的。
为什么?因为ostream是禁止拷贝的,我想你应该看得懂:
private:
ostream operator=(const ostream&);
所以在这两种情况下,你只能自认倒霉,用标准库的cout吧!

#include <iostream>
using namespace std;
int main()
{
int i=7;
ostream *o; //直接用cout<<i<<endl;就得了啊,干嘛搞成那种不正规的形式呢
}

ostream *o;

只是一个指针,所指的对象,不得而知,有可能是空指针,有可能是野指针;所以你后面肯定不能直接使用 *o。

cout 是对象,一个全局变量。当你 #include <iostream> 这个头文件时,就相当于为你程序增加了一个全局变量,代表标准输出。

全局变量的初始化在 main 函数被调用之前;也就是说,在 main 之前,就已经存在了 cin c