#include<iostream>
int main()
{
std::cout << "hello world" << std::endl;
return 0;
}
我们第一个C++程序已经写好了,但是我们有很多疑惑的地方?
比如上面的包含的库,为什么没有 .h 了呢?为什么我们输出时要用 std::cout << "hello world"<< std::endl,这个和C语言的东西不太一样啦?带着这些疑惑我们进入下面的学习中,来得到答案吧!
?
C++中我们使用C++的库就不需要以.h结尾了,为了和C语言作区分。因为我们C++是兼容C语言的,C语言的库我们以 .h 结尾。
命名空间是什么?
? ? ? ?简单来说,就是一个域,像是全局域,局部域一样的一个域,我们创建了一个命名空间,就是创建一个域,在域中我们可以创建变量,函数,和类型。在域中创建的所有东西,都属于这个命名空间域。
为什么要有命名空间呢?
? ? ? ?在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。
?
怎么创建命名空间呢?
? ? ? 我们要是用关键字namespace + 命名空间的名字,我们可以在命名空间中存放变量,函数,类型和另一个命名空间。如下:
namespace HuYang
{
int a = 0;
char b = '0';
int Add(int x, int y)
{
return x + y;
}
struct ListNode
{
struct ListNode* next;
int val;
};
namespace Shuxia
{
double c = 1.102;
char a[100] = { 0 };
int Sub(int m, int n)
{
return m - n;
}
}
}
不同文件下的同一个命名空间问题:
? ? ? ?在不同文件下的名字相同的命名空间。会合并在一起,例如我们在test.c中创建一个命名空间叫做HuYang ,在test.h中也创建一个命名空间,名字也叫作HuYang,那么最后编译的过程中,这两个名字一样的命名空间会合并为一个命名空间。
命名空间的使用:
? ? ? ?我们使用命名空间的方法一般有三种:
1.我们直接把命名空间的内容全部展开,然后我们就可以直接使用啦。
? ? ? ?例如:using namespace std ,首先 std? 是我们C++标准库,包含我们C++官方的内容,例如cout等等,我们直接使用这种方法相当于直接把 std 库中的所有东西展开到了全局域,这样我们在定义时就比较麻烦,可能会定义变量或者函数和库中的冲突。(不推荐)
using namespace std;
int main ()
{
cout<< "hello C++"<<endl;
return 0;
}
2. 正常情况下,我们只需要把部分常用的东西从标准库中引入到作用域中。
? ? ? 例如:using? std :: cout? ?using std :: endl? ?这两局代码实际上就是把 std 中的cout和endl引入全局域中,我们也可以直接使用了。(常用,比较推荐)
?
using? std :: cout;
using std :: endl;
int main ()
{
cout<< "hello C++"<<endl;
return 0;
}
3. 最为标准的用法是,采用命名空间 + 域作用限定符。?
? ? ?例如:std :: cout,? std::endl? ?(使用比较麻烦)
namespace HuYang
{
int a = 10;
}
int main ()
{
std::cout << HuYang::a<<std::endl;
return 0;
}
C++的输入是cin ,输出是cout,我们发现 cout 和 printf 函数有点不同,这个 cout 好像我们没有给他格式,比如上面,我们没有说要按照字符串输出,但是它依然能够输出“hello world”这个字符串,为什么呢?那么cin是不是也不需要我们给他格式或者类型呢?
??
下面的是对C++输入输出的介绍:
1. 使用cout标准输出对象(控制台)和cin标准输入对象(键盘)时,必须包含< iostream >头文件以及按命名空间使用方法使用std。
2. cout和cin是全局的流对象,endl是特殊的C++符号,表示换行输出,他们都包含在包含< iostream >头文件中。
3. <<是流插入运算符,>>是流提取运算符。
4. 使用C++输入输出更方便,不需要像printf/scanf输入输出时那样,需要手动控制格式,C++的输入输出可以自动识别变量类型。
5. 实际上cout和cin分别是ostream和istream类型的对象,>>和<<也涉及运算符重载等知识,这些知识我们我们后续才会学习。
?
总的来说,我们现在还对这些知识很陌生,随着后面的学习我们才会有更多的理解,但是我们今天知道,在C++中输入输出都可以自动识别类型,不需要我们进行传递格式了。
?
例:
int main()
{
int a;
char b;
double c;
std::cin >> a;
std::cin >> b;
std::cin >> c;
std::cout << a << std::endl;
std::cout << b << std::endl;
std::cout << c << std::endl;
return 0;
}
?