网站开发怎么学习自己做的网站怎么放到外网上
- 作者: 五速梦信息网
- 时间: 2026年03月21日 07:32
当前位置: 首页 > news >正文
网站开发怎么学习,自己做的网站怎么放到外网上,怎么做交易猫钓鱼网站,河池网站推广文章目录 #x1f4dd;前言#x1f320; C关键字(C98)#x1f309; 命名空间#x1f320;命名空间定义#x1f309;命名空间使用 #x1f320;命名空间的使用有三种方式#xff1a;#x1f309;加命名空间名称及作用域限定符#x1f320;使用using将命名空间中某个成员… 文章目录 前言 C关键字(C98) 命名空间命名空间定义命名空间使用 命名空间的使用有三种方式加命名空间名称及作用域限定符使用using将命名空间中某个成员引入 使用using namespace 命名空间名称 引入 命名空间的查找先后顺序 C输入输出std命名空间的使用惯例总结 前言
C是在C的基础之上容纳进去了面向对象编程思想并增加了许多有用的库以及编程范式 等。熟悉C语言之后对C学习有一定的帮助本章节主要目标
补充C语言语法的不足以及C是如何对C语言设计不合理的地方进行优化的比如作用 域方面、IO方面、函数方面、指针方面、宏方面等。为后续类和对象学习打基础。 C关键字(C98)
C总计63个关键字C语言32个关键字 ps下面我们只是看一下C有多少关键字不对关键字进行具体的讲解。后面我们学到以后再 细讲。 语言的发展就像是练功打怪升级一样也是逐步递进由浅入深的过程。我们先来看下C的历史版本。
asmdoifreturntrycontinueautodoubleinlineshorttypedefforbooldynamic_castintsignedtypeidpublicbreakelselongsizeoftypenamethrowcaseenummutablestaticunionwchar_tcatchexplicitnamespacestatic_castunsigneddefaultcharexportnewstructusingfriendclassexternoperatorswitchvirtualregisterconstfalseprivatetemplatevoidtrueconst_castfloatprotectedthisvolatilewhiledeletegotoreinterpret_cast 命名空间
在C/C中变量、函数和后面要学到的类都是大量存在的这些变量、函数和类的名称将都存在于全局作用域中可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化以避免命名冲突或名字污染namespace关键字的出现就是针对这种问题的。
命名空间定义
定义命名空间需要使用到namespace关键字后面跟命名空间的名字然后接一对{}即可{} 中即为命名空间的成员。 1. 正确的命名空间定义
//正确的命名空间定义
namespace Asen
{//命名空空间中可以定义变量/函数/类型int rand 10;int Add(int begin, int end){return begin end;}struct Node{struct Node* next;int data;};
}命名空间可以嵌套
namespace Asen
{int a;int b;int Add(int left, int right){return left right;}namespace needs_confidence{int Sub(int begin, int end){return begin - end;}}
}同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。 如一个工程中的test.h和上面test.cpp中两个asen会被合并成一个 注意一个命名空间就定义了一个新的作用域命名空间中的所有内容都局限于该命名空间中 命名空间使用
命名空间中成员该如何使用呢比如以下代码运行
namespace Asen
{int a 0;int b 1;int Add(int left, int right){return left right;}namespace needs_confidence{int Sub(int begin, int end){return begin - end;}}
}int main()
{printf(%d\n, a);return 0;
}运行截图
命名空间的使用有三种方式
加命名空间名称及作用域限定符
int main()
{printf(%d\n, Asen::a);return 0;
}使用using将命名空间中某个成员引入
using Asen::b;
int main()
{printf(%d\n, Asen::a);printf(%d\n, b);return 0;
}使用using namespace 命名空间名称 引入
using namespace Asen;
int main()
{printf(%d\n, Asen::a);printf(%d\n, b);Add(66, 88);return 0;
}命名空间的查找先后顺序
一. 命名空间的查找顺序是:
当前命名空间 父命名空间 全局命名空间 模块命名空间 内置模块命名空间
从最具体的当前命名空间开始向上级别进行查找,一直到全局和内置模块命名空间,以此来解决可能出现的同名变量和函数的命名冲突问题。
具体规则如下:
当前命名空间 首先在当前命名空间中查找。父命名空间 如果当前命名空间没有找到,则查找其直接父命名空间。嵌套的父命名空间 如果直接父命名空间也没有找到,则继续向上查找更高层次的父命名空间。全局命名空间 如果所有父命名空间都没有找到,则最后在全局命名空间中查找。导入的命名空间 如果使用了using指令导入其他命名空间,也会在导入的命名空间中查找。
举个例子:
namespace A
{void func() {// do something }
}namespace B
{namespace C {void func() {// do something} }using namespace A;void test() {func(); // 会调用B::C::func()}
}这里B命名空间中的test函数,首先在B命名空间中查找func,没有找到,然后去B的子命名空间C中查找,找到就调用C中的func。 简单总结 编译默认查找 a、当前局部域 自留地 b、全局域找 村子野地 c、到展开的命名空间中查找 相当于张大爷在自己的自留地加了声明谁需要就来摘 二. 以下是有关命名空间的查找使用实例
namespace Asen
{namespace needs_confi{int rand 0;int Add(int left, int right){return left right;}struct Node{struct Node* next;int data;};}
}namespace needs_confi
{int rand 0;int Add(int left, int right){return (left right) * 10;}
}int main()
{printf(%p\n, rand);printf(%d\n, Asen::needs_confi::rand);printf(hello world\n);printf(%d\n, Asen::needs_confi::Add(2, 3));printf(%d\n, needs_confi::Add(2, 3));struct Asen::needs_confi::Node pnode;
}三· 展开命名空间暴露问题 展开命名空间可能会导致的主要问题如下:
名称冲突 当使用using namespace将一个命名空间中的所有名称导入到当前作用域时,如果导入的命名空间和当前命名空间存在同名的变量/函数等,就会产生名称冲突,编译或运行时可能会出现错误。污染全局作用域 使用using namespace后,导入的所有名称都会暴露到全局作用域,可能会与其他代码产生冲突,也更难追踪是哪个命名空间中的名称。难以区分来源 如果直接使用using namespace,在代码中看到一个名称就不知道它来自哪个具体的命名空间。这给代码维护和调试带来困难。性能影响 使用using namespace后,编译器需要在更广泛的作用域中查找名称,这可能会影响编译效率和程序性能。依赖隐藏 使用using namespace可能会隐藏某些依赖关系,例如标准库名称可能会屏蔽用户自定义的同名名称。难以控制 直接使用using namespace没有办法精细控制导入的范围,无法选择性导入某些名称。
因此一般来说,不推荐在头文件中使用using namespace,在源文件中使用也应谨慎。建议直接使用具体的命名空间限定名称。
如这里我包含了两个头文件其中这个#includeStack.h的内容如下这里主要是用namespace 空间定义然后展开namespace 目的是为了看两个命名空间都有相同的内容在查找时看看会先用哪个还是会编译报错
#includeQueue.h
#includeStack.hnamespace xjh
{typedef struct Stack{}ST;void STInit(ST* ps){}struct Queue{//…};
}// 展开命名空间
using namespace ahui;
using namespace xjh;// 编译默认查找
// a、当前局部域 自留地
// b、全局域找 村子野地
// c、到展开的命名空间中查找 相当于张大爷在自己的自留地加了声明谁需要就来摘int main()
{struct Stack st1;STInit(st1);printf(%d\n, sizeof(st1));ahui::ST st;printf(%d\n, sizeof(st));STInit(st);STPush(st, 1);STPush(st, 2);STPush(st, 3);STPush(st, 4);return 0;
}
代码运行 C输入输出
和我们刚学C语言时学习了printf和scanf来进行输出和输入C同样也有输入和输出我们来看下C是如何来实现问候的。
#includeiostream
// std是C标准库的命名空间名C将标准库的定义实现都放到这个命名空间中
using namespace std;
int main()
{coutHello world!!!endl;return 0;
}运行图 说明
使用cout标准输出对象(控制台)和cin标准输入对象(键盘)时必须包含 iostream 头文件 以及按命名空间使用方法使用std。cout和cin是全局的流对象endl是特殊的C符号表示换行输出他们都包含在包含 iostream 头文件中。是流插入运算符是流提取运算符。使用C输入输出更方便不需要像printf/scanf输入输出时那样需要手动控制格式。 C的输入输出可以自动识别变量类型。实际上cout和cin分别是ostream和istream类型的对象和也涉及运算符重载等知识 这些知识我们我们后续才会学习所以我们这里只是简单学习他们的使用。后面我们还有有 一个章节更深入的学习IO流用法及原理。 注意早期标准库将所有功能在全局域中实现声明在.h后缀的头文件中使用时只需包含对应 头文件即可后来将其实现在std命名空间下为了和C头文件区分也为了正确使用命名空间 规定C头文件不带.h旧编译器(vc 6.0)中还支持iostream.h格式后续编译器已不支持因 此推荐使用iostreamstd的方式。
注意早期标准库将所有功能在全局域中实现声明在.h后缀的头文件中使用时只需包含对应 头文件即可后来将其实现在std命名空间下为了和C头文件区分也为了正确使用命名空间 规定C头文件不带.h旧编译器(vc 6.0)中还支持iostream.h格式后续编译器已不支持因 此推荐使用std的方式。
#include iostream
using namespace std;
int main()
{int a;double b;char c;// 可以自动识别变量的类型cina;cinbc;coutaendl;coutb cendl;return 0;
}注意关于cout和cin还有很多更复杂的用法比如控制浮点数输出精度控制整形输出进制格式等 等。因为C兼容C语言的用法这些又用得不是很多我们这里就不展开学习了。后续如果有需要我 们再学习。
std命名空间的使用惯例
std是C标准库的命名空间如何展开std使用更合理呢
在日常练习中建议直接using namespace std即可这样就很方便。using namespace std展开标准库就全部暴露出来了如果我们定义跟库重名的类型/对 象/函数就存在冲突问题。该问题在日常练习中很少出现但是项目开发中代码较多、规模 大就很容易出现。所以建议在项目开发中使用像std::cout这样使用时指定命名空间 using std::cout展开常用的库对象/类型等方式。 总结
感谢你的收看如果文章有错误可以指出我不胜感激让我们一起学习交流如果文章可以给你一个小小帮助感谢 喜欢的话可以点个关注也可以给博主点一个小小的赞呀
- 上一篇: 网站开发怎么写湖南省建设厅易晓林
- 下一篇: 网站开发怎么样?怎么给人介绍自己做的网站
相关文章
-
网站开发怎么写湖南省建设厅易晓林
网站开发怎么写湖南省建设厅易晓林
- 技术栈
- 2026年03月21日
-
网站开发怎么开发网页设计师培训排行榜
网站开发怎么开发网页设计师培训排行榜
- 技术栈
- 2026年03月21日
-
网站开发怎么接单大连做网站孙晓龙
网站开发怎么接单大连做网站孙晓龙
- 技术栈
- 2026年03月21日
-
网站开发怎么样?怎么给人介绍自己做的网站
网站开发怎么样?怎么给人介绍自己做的网站
- 技术栈
- 2026年03月21日
-
网站开发怎么找客户大型网站开发合同
网站开发怎么找客户大型网站开发合同
- 技术栈
- 2026年03月21日
-
网站开发找哪家Wordpress自建主题视频百度云下载
网站开发找哪家Wordpress自建主题视频百度云下载
- 技术栈
- 2026年03月21日
