谁知道C++里的cout定义在哪里的?

WuYL7812 2010-02-20 01:10:22
谁知道C++里的cout定义在哪个文件里的?
又如何保证cout先于其他全局变量先初始化?

struct Test
{
Test() {std::cout <<" Test() \n";}
~Test() {std::cout << "~Test()\n";}
};

Test tt;

编译器怎么保证tt构造之前cout就已经构造好了呢?

包含了<iostream>就声明了 cout, extern ostream cout
我不包含iostream,但是声明一下,cout,也可以使用,不知道哪里定义在哪里
...全文
954 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
梅州扣肉 2010-02-25
  • 打赏
  • 举报
回复
cout 定义在cout.cpp中...
InfidelX 2010-02-22
  • 打赏
  • 举报
回复
应该是namespace std,里面,一个全局对象
WuYL7812 2010-02-22
  • 打赏
  • 举报
回复
都关心,先找到其定义的地方,看看能不能看出来什么
怎么让cout先初始化的,这个估计跟C++语法无关,可能是跟编译器有关,不同编译器有不同处理.
估计在连接时,把lib放在最前面,这样就先初始化,而连接是ide自动控制的
我用命令行编译看看

引用 8 楼 arong1234 的回复:
楼主到底关心在哪定义还是先初始化?初始化顺序和定义在哪可没有啥关系
引用 1 楼 thefirstz 的回复:cout在ostream中定义啊
cq_gongyoulong 2010-02-21
  • 打赏
  • 举报
回复
cout包含在 #include <iostream>

printf包含在 #include <stdio.h>
arong1234 2010-02-21
  • 打赏
  • 举报
回复
楼主到底关心在哪定义还是先初始化?初始化顺序和定义在哪可没有啥关系
引用 1 楼 thefirstz 的回复:
cout在ostream中定义啊
chp845 2010-02-21
  • 打赏
  • 举报
回复
cout已经在iostream定义了,也可以使用>>重载把
yyg990441 2010-02-20
  • 打赏
  • 举报
回复
就是说cout已经被放在标准库libstdc++里面了,每次连接器会自动连接~~~是这样吗?
昵称很不好取 2010-02-20
  • 打赏
  • 举报
回复
引用 1 楼 thefirstz 的回复:
cout在ostream中定义啊

1楼说的不对,先别看了
yyg990441 2010-02-20
  • 打赏
  • 举报
回复
ostream里面只是声明,不是定义吧?我觉得是不是放在库文件里面了?
老邓 2010-02-20
  • 打赏
  • 举报
回复
引用 1 楼 thefirstz 的回复:
cout在ostream中定义啊

那只是一个声明,定义是放在cout.cpp源文件中。
你可以查看一下VC10的CRT源码。
下面是cout.cpp的内容,其他类似:
// cout -- initialize standard output stream
#include <fstream>
#include <iostream>

#pragma warning(disable: 4074)
#pragma init_seg(compiler)
static std::_Init_locks initlocks;

_STD_BEGIN
// OBJECT DECLARATIONS

__PURE_APPDOMAIN_GLOBAL static filebuf fout(_cpp_stdout);
#if defined(_M_CEE_PURE)
__PURE_APPDOMAIN_GLOBAL extern ostream cout(&fout);
#else
__PURE_APPDOMAIN_GLOBAL extern _CRTDATA2 ostream cout(&fout);
#endif
// INITIALIZATION CODE
struct _Init_cout
{ // ensures that cout is initialized
__CLR_OR_THIS_CALL _Init_cout()
{ // initialize cout
_Ptr_cout = &cout;
if (_Ptr_cin != 0)
_Ptr_cin->tie(_Ptr_cout);
if (_Ptr_cerr != 0)
_Ptr_cerr->tie(_Ptr_cout);
if (_Ptr_clog != 0)
_Ptr_clog->tie(_Ptr_cout);
}
};
__PURE_APPDOMAIN_GLOBAL static _Init_cout init_cout;

_STD_END

/*
* Copyright (c) 1992-2007 by P.J. Plauger. ALL RIGHTS RESERVED.
* Consult your license regarding permissions and restrictions.
V5.03:0009 */


其中:
#if defined(_M_CEE_PURE)
__PURE_APPDOMAIN_GLOBAL extern ostream cout(&fout);
#else
__PURE_APPDOMAIN_GLOBAL extern _CRTDATA2 ostream cout(&fout);
#endif

就是定义,虽然也带一个extern,但并不影响。
你可以用代码证明之。
昵称很不好取 2010-02-20
  • 打赏
  • 举报
回复
cout在ostream中定义啊

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧