目录
1.hello c++
c++兼容c语言,当你在cpp后缀的文件下编译一个基本的 “hello world ” 的时候,能发现完美运行。
在c++中,打印可以用一种新的方式:
#include<iostream>//注意没有.h
using namespace std;//展开标准库
int main()
{
printf("hello world\n");
cout << "hello world" << endl;
}
结果:

cout意为“流插入”,可以理解成输出,通过观察两组数据可以发现,endl 可以理解成结束换行 。
2.命名空间
我们编程的时候可能会定义一个与库里面或者其他源文件冲突的变量。C++中使用命名空间可以避免命名冲突。命名空间提供了一种将库和用户代码包装在一起的方法,以避免名称冲突。通过使用命名空间,开发者可以将代码分割为不同的逻辑单元,每个逻辑单元都有自己的命名空间,并且不同逻辑单元之间的变量、函数等名称不会发生冲突。
首先我们先引入域作用限定符:
int a = 2;
void f1()
{
int a = 0;
printf("%d\n", a);
printf("%d\n",::a); // ::域作用限定符
}
void f2()
{
int a = 1;
f1();
cout << a << endl;
}
在main函数中通过 f2()的方式输出三行结果。

第一个和第三个遵循局部变量优先原则,输出局部定义的值,第二个通过域作用限定符 :: 前没有参数默认指定从全局找。输出在全局定义的值。
命名空间 -- 命名空间域,只影响使用,不影响生命周期
#pragma once
struct Node
{
struct Node* next;
int val;
};//Seqlist.h
#pragma once
struct Node
{
struct Node* next;
int val;
};
struct Queue
{
struct Node* head;
struct Node* tail;
};//queue.h
对于两个不同的.h 文件,在主程序包含两个程序的头文件,会发现编译出错, “Node”:“struct”类型重定义 。 此时就体现出命名空间的价值 了,我们可以封装两个不同的 命名空间,类似“namespace + 名字{ 封装内容}” 的方式。
需要注意的是:命名空间 -- 命名空间域,只影响使用,不影响生命周期。
这里我们以list.h为例,展开对应的命名空间
#pragma once
namespace B
{
struct Node
{
struct Node* next;
int val;
};
}
接着我们通过指定命名空间的方式找到你想要使用的代码
/*B ::struct Node a;*/
struct B ::Node a;
这段代码的意思是通过A这个空间找到对应的Node并创建相应的结构体。千万不能像第一行代码一样展开,我们封装的是Node这个结构体变量而不包含结构体关键字。
开头我们提到了一个命名空间using namespace std;这句话的意思就是在全局展开C++标准程序库的内容,如果我们不想展开多余的内容,例如我只想使用c++的输入输出函数,或者刚才的那个Node结构体,可以进行部分展开:
using std::cout;
using std::endl;
using B::Node;
这样做的好处是可以避免多次繁琐得在程序中展开常用命名空间的变量,前提是确保展开后不会出现重名的变量。还请读者在实际场景中具体选择。
需要注意的是,当你使用不同头文件的Node结构体时,要避免定义的变量名不要重名。
int i;
float i;
简单打个比方,类似这样,注意就行。
那如果命名空间重名了怎么办,大家可以自行想一下~。
总结
1.指定命名空间展开
2.全局展开
3.部分展开
在一些复杂的环境中是不推荐全局展开,需要注意的是不同展开方式的特点以及适用场景。
4.命名空间支持嵌套定义
本文介绍了C++中的HelloWorld程序,强调了C++与C语言的兼容性,并展示了使用iostream库的输出方式。文章重点讨论了命名空间的概念,它是解决命名冲突的有效手段,通过示例解释了命名空间的使用,包括局部作用域、全局作用域和域作用限定符。同时,提到了命名空间的展开方式,如全局展开、部分展开和指定命名空间展开,并提醒了避免命名冲突的注意事项。

被折叠的 条评论
为什么被折叠?



