首先看一段小程序
#include <iostream>
using namespace std;
int main()
{
cout<<"hello world"<<'\n';
cout<<"hello world"<<endl;
return 0;
}
从上面的程序中理解几个知识点:
一.命名空间 std
什么是命名空间呢? 为什么要引入命名空间呢? ,在c语言中,一般来说程序都比较小,所以刚开始的时候没发现什么问题,后来随着时代的变化,程序越来越大,同理写程序用到的变量会越来越多,但是问题出现了,变量多了难免出现重名的情况,这怎么办,只能人为的注意,但是这样的话起的名字难免与本意相差太多,这样c++就引入了命名空间的概念,
那什么是命名空间呢? 打个比方,小张,小马都有一部手机叫iphone,虽然都叫iphone,但是是有区别的,一个是小张的,一个是小马的,所以命名空间就是干这个用的,区别变量用的
看下面程序
#include <iostream>
namespace a{
int i;
}
namespace b{
int i;
}
in main()
{
a::i=5;
b::i=6;
return 0;
}
其中定义了两个名字空间,里面都有整形变量 i; 你看,是不是很方便,如果没有a和b,就不能定义两个i了,当然命名空间里面也可以写类什么的
那么为什么要写using namespace std 呢? 如果上面看明白的话,就很容易理解了,c++中using是关键字,那么下面用到的cout是个对象,它是在命名空间std中声明的
而命名空间std是在库文件iostream中定义的,嗯..但要注意的是 ,cout的定义是在别的地方
二. '\n' 与 endl的区别
首先这段小程序输出结果是一样的,但是这两个还是有区别的,endl除了有换行的作用外,还有一个作用就是清空缓冲槽,关于缓冲槽参考我转发的文章
但是如果这样的话第一个hello world 为什么会输出呢,原因是对于cin 与cout的话系统会默认的清空缓冲槽,它们的区别可以参考下面的代码
#include <iostream>
using namespace std;
int main()
{
ofsream outfile("test.txt");
for(int i=0; i< 100; i++){
outfile << 'a' << endl;
//outfile << 'a' << '\n';
}
system("PAUSE");
return 0;
}
这段程序中,向文件test.txt中输入a,运行程序之后,会在system这段代码中停掉(程序没有执行完),这时候观察一下test文件,发现a输入到文件中了,这是因为outfile将a输入到缓冲槽中,然后endl,这时候刷新一下,执行io,那么如果把这句话注释掉,把下面那段代码的注释开打,同样的步骤执行,发现a是没有写入文件中的,这就是它们的区别