有关c++中命名空间问题
最近在学习c++,由于以前有c基础,学习c++感觉还是有点吃力,因为很多东西都不太一样
问题:
我想知道在开始写程序的时候要先这样
#include <iostream>
using name space std
extern _CRTIMP ostream cout;//这里好像是声明吧。。。
// 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
ostream cout(&fout);这里已经有个直接初始化了,所以是定义。在这个概念上,C++与C是一样的。
直接初始化啥意思?前面不是有个extern 吗 extern 后面接的不是函数的声明吗? 初学c++,不太明白。。。能详细一点吗? 谢谢了~
但如果这里改成这样就不行了,因为此时i会被初始化,这样就等于是重定义了一个i,相当于extern没起作用
int i=0;
extern i;
int main(){}
int i=0;
extern i=0;
int main(){}