当前位置: 首页 > news >正文

【C++】入门(一):命名空间、缺省参数、函数重载

目录

一、关键字

二、命名空间

问题引入(问题代码):

域的问题

1.::域作用限定符 的 用法:

2.域的分类

3.编译器的搜索原则

命名空间的定义

命名空间的使用

举个🌰栗子:

1.作用域限定符指定命名空间名称

2. using 引入命名空间中的成员 即 展开命名空间中某一个

3. usinng namespace 命名空间名称 展开命名空间

三、C++输入、输出

四、缺省参数

概念

全缺省参数

半缺省参数

实践中的应用场景🌰举个例子:

声明和定义分离

回顾 声明 和定义的概念

再来分析上述程序

理解编译与链接的过程

理解函数与文件的关系

五、函数重载

代码示例:

C++是如何支持函数重载的?

函数名修饰


一、关键字

asmdoifreturntrycontinue
autodoubleinlineshorttypedeffor
booldynamic_castintsignedtypeidpublic
breakelselongsizeoftypenamethrow
caseenummutablestaticunionwchar_t
catchexplicitnamespacestatic_castunsigneddefault
charexternoperatorswitchvirtualregister
constfalseprivatetemplatevoidtrue
const_castfloatprotectedthisvolatilewhile
deletegotoreinterpret_cast

增加的关键字: C++增加了一些关键字来支持面向对象编程(如类、继承、多态等)和模板编程。例如,class,public,protected,private,virtual,friend,template,typename等。这些关键字没有在C语言中。

类型增强:C++增加了一些用于类型安全和方便的关键字,如bool,true,false,using,namespace等。

异常处理:为了支持异常处理,C++引入了try,catch,throw等关键字。

新的转换操作符:C++提供了static_cast,dynamic_cast,const_cast和reinterpret_cast等关键字进行类型转换,这是C语言中所没有的。

增强的存储类说明符:C++引入了mutable和thread_local等存储类说明符。

模板编程:为了支持泛型编程,C++增加了template和typename关键字。

新增运算符:C++还定义了如new,delete等用于动态内存管理的关键字,这些在C中通常通过库函数如malloc和free来实现。

特殊成员函数关键字:C++还有如default和delete等关键字,用于特殊成员函数的声明,这样设计是为了提供更好的控制。

二、命名空间

问题引入(问题代码):

下面代码存在命名冲突 : rand变量 和头文件<stdlib.h>中声明的函数 rand() 名字相同 导致冲突。

#include<stdio.h>
#include<stdlib.h>   /*rand*/
int rand = 0;
// C语言没办法解决类似这样的命名冲突问题,所以C++提出了namespaceguan来解决
int main()
{printf("%d\n",rand);return 0;
}

域的问题

1.::域作用限定符 的 用法:

限定符左边是哪一个域名 就限定了访问该变量的范围

左边是空 默认是全局域

2.域的分类

  • 全局域

  • 局部域:如果不用限定符,默认访问局部域 局部优先

  • 命名空间域:为了防止命名冲突 eg.全局定义两个同名变量 ,防止重定义,C++提出就用关键字namespace把他们定义在不同命名空间域中。

  • 类域

    注意:

    全局域、局部域既会影响生命周期,也会影响访问。命名空间只影响访问

3.编译器的搜索原则 

 1️⃣当前局部域 2️⃣全局域 3️⃣如果指定了,直接去指定域搜索

命名空间的定义

正常定义

 // 正常的命名空间定义
namespace hhh
{// 命名空间中可以定义变量/函数/类型int rand = 10;int Add(int left, int right){return left + right;}struct Node{struct Node* next;int val;};}

嵌套定义

举个栗子🌰:

namespace aaa
{namespace bbb{void Push(){cout<<"zs"<<endl;}}namespace ccc{void Push(){cout<<"yyy"<<endl;}}
}
int main()
{//嵌套定义在命名空间的同名函数 各自调用bit::bbb::Push();bit::ccc::Push();return 0;
}

ps:命名空间可以重名,编译器会把他们合并,只要命名空间内部不冲突就可以

命名空间的使用

命名空间到底该如何使用?

举个🌰栗子:

namespace yyy
{//命名空间中定义 变量 / 函数 /类型int a = 0;int b= 1;int Add(int left,int right){return left+right;}struct Node{struct Node* next;int val;};
}

1.作用域限定符指定命名空间名称

//指定访问
int main()
{//::作用域限定符printf("%d\n",yyy::a);return 0;
}

2. using 引入命名空间中的成员 即 展开命名空间中某一个

//展开一个
using yyy::b;
int main()
{printf("%d\n",yyy::a);//不可以 因为此时只展开了一个成员变量printf("%d\n",b);
}

3. usinng namespace 命名空间名称 展开命名空间

展开命名空间 影响的是 域的搜索规则。不展开命名空间,默认情况编译器只会在局部域、全局域搜索。展开命名空间就可以在命名空间里搜索。

//展开全部
using namespace yyy;
int main()
{printf("%d\n",yyy::a);//指定去该命名空间找变量aprintf("%d\n",b)
}

注意:

1. 日常练习展开为了方便使用可以展开std,实际工程实践中慎重使用!

2.展开命名空间 不是 等同于引入全局变量!

3.展开命名空间 跟 包含头文件 也有本质区别,包含头文件 在预处理过程中本质是拷贝头文件的内容

三、C++输入、输出

解释Hello world代码

//包含标准输入输出流库
#include<iostream>
// std是C++标准库的命名空间名,C++将标准库的定义实现都放到这个命名空间中
using namespace std;int main(){//cout和cin是全局的流对象,细说分别是ostream和istream类型的对象// <<是流插入运算符,>>是流提取运算符//endl是C++符号,表示endline换行//他们都包含在包含<iostream>头文件中cout<<"Hello world!!!"<<endl;return 0;}

说明:使用cout标准输出对象(控制台)和cin标准输入对象(键盘)时,必须包含< iostream >头文件 以及按命名空间使用方法使用std。

补充:std命名空间的使用习惯

1.日常练习:直接展开 using namespace std

2.项目开发:std::cout 使用时指定命名空间 + using std::cout 展开常用库对象

C++ 输入输出 自动识别变量类型 

  • 示例代码:
    #include <iostream>
    using namespace std;
    int main()
    {int a;double b;char c;// 可以自动识别变量的类型cin>>a;cin>>b>>c;cout<<a<<endl;cout<<b<<"  "<<c<<endl;return 0;
    }
    • 说明

cin>>a;这行代码从标准输入流(键盘)中接受一个整数,并将其存储在变量a中。cin会根据提供的变量类型自动解释输入数据。cin>>b>>c;这行代码首先从标准输入流中接收一个双精度浮点数,并将其存储在变量b中,然后接收一个字符并存储在c中。 

四、缺省参数

  • 概念

    声明或定义函数时为函数的参数指定缺省值。缺省值就是给形参设置一个默认值。调用函数时,如果没有指定实参,则使用参数的默认值。

    缺省值必须是 常量或者全局变量。一般使用常量。

    void Func(int a = 0)
    {cout<<a<<endl;
    }
    int main()
    {Func();    //没有传参 使用参数默认值 Func(10);  //传参时 使用指定的实参return 0;
    }
  • 全缺省参数

    void Func(int a = 10, int b = 20, int c = 30)
    {cout<<"a = "<<a<<endl;cout<<"b = "<<b<<endl;cout<<"c = "<<c<<endl;
    }
    调用Func()时,可以这样给参数int main()
    {Func(1,2,3);Func(1,2);Func(1);Func();//注意:不可以跳越传值//Func(,1,2);return 0;
    }
  • 半缺省参数

    注意:只能从右往左连续给缺省值,这样调用保证传的实参顺序不存在歧义

    void Func(int a, int b = 20, int c = 30)
    {cout<<"a = "<<a<<endl;cout<<"b = "<<b<<endl;cout<<"c = "<<c<<endl;
    }
    //调用 同样不能跳越给
    int main()
    {Func(1,2,3);Func(1,2);Func(1);
    }

实践中的应用场景🌰举个例子:

struct Stack
{int* a;int size;int capacity;//...
};
//StackInit()改造为半缺省函数 使得可以适用更多的需要开辟空间的场景
void StackInit(struct Stack* ps,int n=4)
{ps->a=(int*)malloc(sizeof(int)*n);
}
int main()
{struct Stack st1;//缺省参数 使得函数可以适应不同场景 // 1、确定要插入100个数据StackInit(&st1, 100);  // call StackInit(?)
​// 2、只插入10个数据struct Stack st2;StackInit(&st2, 10);   // call StackInit(?)
​// 3、不知道要插入多少个 //这时就可以使用函数定义里提供的 参数缺省值 //不知道插入多少个 可以先初始化四个空间struct Stack st3;StackInit(&st3);
​return 0;
}
  • 声明和定义分离

    回顾 声明 和定义的概念

    • 函数声明告诉编译器函数的名称、返回类型以及参数列表(类型、顺序和数量),但不涉及函数的具体实现。函数声明经常出现在头文件(.h)中

    • 函数定义:提供了函数的实际实现,它包括函数的主体,即函数被调用时将执行的具体代码。函数定义包含了函数声明的所有信息,并加上了函数体

    //Stack.h 声明
    struct Stack
    {int* a;int size;int capacity;//...
    };
    void StackInit(struct Stack* ps,int n=4);//*注意 必须在声明中给出缺省值
    void StackPush(struct Stack* ps,int x);
    //Stack.cpp 定义
    void StackInit(struct Stack* ps,int n)//*注意声明和定义中缺省值不能同时给
    {ps->a=(int*)malloc(sizeof(int)*n);
    }
    void StackPush(struct Stack* ps , int x)
    {}
    //Test.cpp
    #include"Stack.h"
    int main()
    {struct Stack st1;// 1、确定要插入100个数据StackInit(&st1, 100);  // call StackInit(?)//此时包含了头文件,Test.cpp只有函数声明 用这个函数的名字找到该函数的地址 编译阶段会检查调用该函数是否存在匹配的函数,经过检查 匹配// 2、只插入10个数据struct Stack st2;StackInit(&st2, 10);   // call StackInit(?)// 3、不知道要插入多少个 struct Stack st3;StackInit(&st3);return 0;
    }

    但是试想一下,1️⃣如果缺省值只在函数定义中给出,编译阶段 无法用这个函数的名字找到该函数的匹配 ,因为调用传参跟函数声明并不匹配。另一种情况,2️⃣如果在函数的声明和定义中都指定了缺省参数编译器也可能不确定应该使用哪个版本的默认值为了避免这种情况,C++标准规定了缺省参数应当只在一个地方指定:

    • 如果函数声明在头文件中进行,那么就在头文件中的声明处指定缺省参数

    • 如果函数没有在头文件中声明(例如,完全在一个.cpp文件内定义),那么就在函数定义处指定缺省参数

    综上,

    1️⃣在项目中,声明和定义应当分离,缺省值一定要在函数声明中给出!因为,编译阶段只有函数声明,从而保证编译阶段是没有问题的。

    2️⃣声明和定义分离,导致编译阶段无法找到函数的定义,没有函数的地址。

  • 再来分析上述程序

    • 理解编译与链接的过程

      1️⃣预处理阶段 :展开头文件、宏替换、条件编译、删除注释

      对于每个.c文件,编译过程从预处理开始。预处理器会处理以#开头的指令,例如#include "stack.h"会将stack.h中的内容文本上粘贴到stack.ctest.c文件中,这样stack.ctest.c就可以看到这些函数声明了

      2️⃣编译:检查语法➡️生成汇编代码

      编译器接着编译每个.c源文件,将它们转换成目标代码(通常是机器代码的一种中间形态,称为目标文件,扩展名为.o或.obj)。此时,编译器确保源代码符合语法规则,对每个源文件进行类型检查,确保所有函数调用都符合其声明,但还不解决跨文件的函数引用问题。例如,stack.c被编译成stack.o,test.c被编译成test.o

      3️⃣汇编:汇编代码➡️二进制机器码

      4️⃣链接:合并、有些地方要用函数名去其他文件找函数地址

      一旦所有的源文件被编译成目标文件,链接器(linker)负责将这些目标文件以及必要的库文件链接成一个单一的可执行文件。在链接过程中,如果test.c(对应的是test.o)调用了stack.c中(对应的是stack.o)的函数,链接器负责“修补”这些调用,使得test.o中的调用可以正确地连接到stack.o中定义的函数上,链接器确保所有外部引用都能正确解析到它们所引用的实体。

    • 理解函数与文件的关系

      • 在stack.h中声明的函数,让其他源文件知道这些函数的存在、它们的参数以及返回值类型。stack.h扮演了接口的角色。

      • stack.c提供了stack.h中声明的函数的具体实现。test.c作为使用这些函数的客户端代码,通过#include "stack.h"能够调用这些函数。

      • 编译过程中,test.c和stack.c分别被编译成中间的目标文件。这些目标文件中的函数调用尚未解析到具体的地址

      • 在链接过程,链接器解析这些调用,使得从test.o中的调用可以正确地定位到stack.o中的函数定义,从而生成一个完整的可执行文件,所有的函数调用都被正确地解析和连接,这个地址修正的过程也叫做重定位

五、函数重载

C语言不允许同名函数

C++允许同名函数。要求:函数名相同,参数不同,构成 函数重载

函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数类型类型顺序)不同,常用来处理实现功能类似但数据类型不同的问题。

代码示例:

#include<iostream>using namespace std;// 1、参数类型不同
int Add(int left, int right)
{cout << "int Add(int left, int right)" << endl;return left + right;
}
double Add(double left, double right)
{cout << "double Add(double left, double right)" << endl;return left + right;
}// 2、参数个数不同
void f()
{cout << "f()" << endl;
}
void f(int a)
{cout << "f(int a)" << endl;
}// 3、参数类型顺序不同
void f(int a, char b)
{cout << "f(int a,char b)" << endl;
}
void f(char b, int a)
{cout << "f(char b, int a)" << endl;
}
int main()
{Add(10, 20);Add(10.1, 20.2);f();f(10);f(10, 'a');f('a', 10);return 0;
}

C语言不支持重载 链接时,直接用函数名去找地址,有同名函数的情况则区分不开。

  • C++是如何支持函数重载的?

    通过函数名修饰实现的,只要函数参数不同,函数名就会被修饰成不同。然后直接用修饰好的名字,去找该函数的地址。

    • 函数名修饰

      名字修饰是编译器自动进行的一种处理过程,它将C++源代码中的函数名和变量名转换成包含更多信息的唯一标识符。这些信息通常包括函数的参数类型、参数数量等,甚至可能包括所属的类名(对于类成员函数),通过这种方式,每个重载的函数都会被赋予一个独一无二的名字,确保链接器在最后链接程序的时候能够区分它们

Linux下g++的修饰规则简单易懂,下面我们使 用了g++演示了这个修饰后的名字。 通过下面我们可以看出gcc的函数修饰后名字不变。而g++的函数修饰后变成【_Z+函数长度 +函数名+类型首字母】。

  • 采用C语言编译器编译后结果

 

结论:在linux下,采用gcc编译完成后,函数名字的修饰没有发生改变。

  • 采用C++编译器编译后结果

 

结论:在linux下,采用g++编译完成后,函数名字的修饰发生改变,编译器将函数参数类型信息添加到修改后的名字中。

通过以上这里就理解了C语言没办法支持重载,因为同名函数没办法区分。而C++是通过函数修 饰规则来区分,只要参数不同,修饰出来的名字就不一样,就支持了重载。

相关文章:

【C++】入门(一):命名空间、缺省参数、函数重载

目录 一、关键字 二、命名空间 问题引入(问题代码)&#xff1a; 域的问题 1.::域作用限定符 的 用法&#xff1a; 2.域的分类 3.编译器的搜索原则 命名空间的定义 命名空间的使用 举个&#x1f330;栗子&#xff1a; 1.作用域限定符指定命名空间名称 2. using 引入…...

深入分析 Android Activity (四)

文章目录 深入分析 Android Activity (四)1. Activity 的生命周期详解1.1 onCreate1.2 onStart1.3 onResume1.4 onPause1.5 onStop1.6 onDestroy1.7 onRestart 2. Activity 状态的保存与恢复2.1 保存状态2.2 恢复状态 3. Activity 的启动优化3.1 延迟初始化3.2 使用 ViewStub3.…...

Java实现顺序表

Java顺序表 前言一、线性表介绍常见线性表总结图解 二、顺序表概念顺序表的分类顺序表的实现throw具体代码 三、顺序表会出现的问题 前言 推荐一个网站给想要了解或者学习人工智能知识的读者&#xff0c;这个网站里内容讲解通俗易懂且风趣幽默&#xff0c;对我帮助很大。我想与…...

刷题笔记1:如何科学的限制数字溢出问题

LCR 192. 把字符串转换成整数 (atoi) - 力扣&#xff08;LeetCode&#xff09; 我们以力扣的此题目为例&#xff0c;简述在诸如大数运算等问题中如何限制数字溢出问题。 先来直接看看自己的处理方式&#xff1a; class Solution { public:int myAtoi(string str) {int pcur0;…...

社区供稿丨GPT-4o 对实时互动与 RTC 的影响

以下文章来源于共识粉碎机 &#xff0c;作者AI芋圆子 前面的话&#xff1a; GPT-4o 发布当周&#xff0c;我们的社区伙伴「共识粉碎机」就主办了一场主题为「GPT-4o 对实时互动与 RTC 的影响」讨论会。涉及的话题包括&#xff1a; GPT-4o 如何降低延迟&#xff08;VAD 模块可…...

基于Linux的文件操作(socket操作)

基于Linux的文件操作&#xff08;socket操作&#xff09; 1. 文件描述符基本概念文件描述符的定义&#xff1a;标准文件描述符&#xff1a;文件描述符的分配&#xff1a; 2. 文件描述符操作打开文件读取文件中的数据 在linux中&#xff0c;socket也被认为是文件的一种&#xff…...

C++面试题记录(网络)

TCP与UDP区别 1. TCP面向连接&#xff0c;UDP无连接&#xff0c;所以UDP数据传输效率更高 2.UDP可以支持一对一、一对多、多对一、多对多通信&#xff0c;TCP只能一对一 3. TCP需要在端系统维护连接状态&#xff0c;包括缓存&#xff0c;序号&#xff0c;确认号&#xff0c;…...

YoloV8改进策略:卷积篇|基于PConv的二次创新|附结构图|性能和精度得到大幅度提高(独家原创)

摘要 在PConv的基础上做了二次创新,创新后的模型不仅在精度和速度上有了质的提升,还可以支持Stride为2的降采样。 改进方法简单高效,需要发论文的同学不要错过! 论文指导 PConv在论文中的描述 论文: 下面我们展示了可以通过利用特征图的冗余来进一步优化成本。如图3所…...

图论(从数据结构的三要素出发)

文章目录 逻辑结构物理结构邻接矩阵定义性能分析性质存在的问题 邻接表定义性能分析存在的问题 十字链表(有向图)定义性能分析 邻接多重表(无向图)定义性能分析 数据的操作图的基本操作图的遍历广度优先遍历&#xff08;BFS&#xff09;算法思想和实现性能分析深度优先最小生成…...

spark相关知识

1.Spark的特点 Spark的设计遵循“一个软件栈满足不同应用场景”的理念&#xff0c;逐渐形成了一套完整的生态系统&#xff0c;既能够提供内存计算框架&#xff0c;也可以支持SQL即席查询、实时流式计算、机器学习和图计算等。 运行速度快&#xff0c;易使用&#xff0c;强大的技…...

K8S认证|CKA题库+答案| 12. 查看Pod日志

目录 12、查看Pod日志 CKA v1.29.0模拟系统 下载试用 题目&#xff1a; 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、提取错误日志 3&#xff09;、验证提取结果 12、查看Pod日志 CKA v1.29.0模拟系统 下载试用 题目&#xff1a; 您必须在以下C…...

【Java SE】 String、StringBuff和StringBuilder

&#x1f970;&#x1f970;&#x1f970;来都来了&#xff0c;不妨点个关注叭&#xff01; &#x1f449;博客主页&#xff1a;欢迎各位大佬!&#x1f448; 文章目录 1. 字符串不可变性1.1 设计不可变1.2 修改字符串创建新对象1.3 为什么字符串不可变1.4 String类设计不可变的…...

产品经理-需求分析(三)

1. 需求分析 从业务的需要出发&#xff0c;确定业务目的和目标&#xff0c;将业务需求转为产品需求 1.1 业务需求 业务需求 业务动机 业务目标 就是最根本的动机和目标成果&#xff0c;通过这个需求解决特定的问题 1.2 产品需求 产品需求 解决方案 产品结构 产品流程…...

Linux 编译器gcc/g++使用

gcc/g同理 编译器运行过程 1. 预处理&#xff08;进行宏替换) gcc -E a.c -o a.i 预处理后还是c语言 -E 只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面 告诉gcc&#xff0c;从现在开始进行程序的翻译&#xff0c;将预处理工作做完停下 2. 编译&#x…...

adam优化器计算过程(tensorflow)

一、adam原理 原理 应用 优点 缺点 二、手动实现 一步一步计算 三、使用tensorflow api实现 api使用 四、一个具体的深度学习的例子...

【数据结构与算法 | 链表篇】力扣876

1. 力扣876 : 链表的中间节点 (1). 题 给你单链表的头结点 head &#xff0c;请你找出并返回链表的中间结点。 如果有两个中间结点&#xff0c;则返回第二个中间结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[3,4,5] 解释&#xff1a;链表…...

kubeadm引导欧拉系统高可用的K8S1.28.X

文章目录 一. 核心组件架构二. 有状态与无状态应用三. 资源对象3.1 规约与状态3.2 资源的分类-元数据,集群,命名空间3.2.1 元数据3.2.2 集群资源 3.3 命名空间级3.3.1 pod3.3.2 pod-副本集3.3.3 pod-控制器 四. Kubeadm安装k8s集群4.1 初始操作4.2 ~~所有节点安装Docker&#x…...

【信息学奥赛】字典的键和值对换

【信息学奥赛】字典的键和值对换 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 输入一个字典&#xff0c;要求将该字典的键和值对换。&#xff08;注意&#xff0c;字典中有键的值是重复的&#xff09; 输入&#xff1a; 一行&#xff0…...

使用Django框架搭建Web应用

文章目录 简介安装Django创建一个Django项目创建一个Django应用编写视图配置URL运行开发服务器总结与拓展数据库集成管理后台表单处理模板引擎安全性 简介 Django 是一款基于 Python 语言的开源 Web 应用框架&#xff0c;采用了 MVC&#xff08;模型-视图-控制器&#xff09;设…...

我用Mybatis的方式封装了OLAP查询!

背景 相信做数据平台的朋友对OLAP并不陌生&#xff0c;主流的OLAP引擎有Clickhouse&#xff0c;Impala&#xff0c;Starrocks…以及公司二开的OLAP平台&#xff0c;本次要说的OLAP属于最后一种。 最近在做一个BI项目&#xff0c;业务背景很简单&#xff0c;就是一个数据展示平…...

golang rune类型解析,与byte,string对比,以及应用

Golang中的rune类型是一个32位的整数类型(int32)&#xff0c;它是用来表示Unicode码点的。rune类型的值可以是任何合法的Unicode码点&#xff0c;它通常用来处理字符串中的单个字符。 在Golang中&#xff0c;字符常量使用单引号来表示&#xff0c;例如 a。使用单引号表示的字符…...

重学java 51.Collections集合工具类、泛型

"我已不在地坛&#xff0c;地坛在我" —— 《想念地坛》 24.5.28 一、Collections集合工具类 1.概述:集合工具类 2.特点: a.构造私有 b.方法都是静态的 3.使用:类名直接调用 4.方法: static <T> boolean addAll(collection<? super T>c,T... el…...

多语言印度红绿灯系统源码带三级分销代理功能

前端为2套UI&#xff0c;一套是html写的&#xff0c;一套是编译后的前端 后台功能很完善&#xff0c;带预设、首充返佣、三级分销机制、代理功能。 东西很简单&#xff0c;首页就是红绿灯的下注页面&#xff0c;玩法虽然单一&#xff0c;好在不残缺可以正常跑。...

HTML拆分与共享方式——多HTML组合技术

作者:私语茶馆 1.应用场景 如果是一个产品级的Web项目,往往非常多的页面部分是重复的(为保持风格一致),每个HTML页面将这些重复部分重新写一次,既带来极大的工作量,也造成后续修改不便。 因此会考虑到将一个HTML的不同部分拆分为多个HTML页面,利用类似Include方式包含…...

K8s集群之 存储卷 PV PVC

目录 默写 1 如何将pod创建在指定的Node节点上 2 污点的种类(在node上设置) 一 挂载存储​​​​​​​ 1 emptyDir存储卷 2 hostPath存储卷 ①在 node01 节点上创建挂载目录 ② 在 node02 节点上创建挂载目录 ③ 创建 Pod 资源 ④ 在master上检测一下&#xff1a;…...

“腾讯云 AI 代码助手”体验

一、“腾讯云 AI 代码助手”体验 1、注册账号并进行实名认证 2、进入开发环境 3、体验javascript简单函数 代码如下&#xff1a; //请写一个两个日期计算的函数 function dateDiff(date1, date2) {return date2.getTime() - date1.getTime(); } var date1 new Date("2…...

Django入门全攻略:从零搭建你的第一个Web项目

系列文章目录 努力ing Django入门全攻略&#xff1a;从零搭建你的第一个Web项目努力ing… 文章目录 系列文章目录前言一、Django1.0 框架介绍1.1 Django安装1.2 Django项目创建1.3 目录介绍 二、子应用2.1 子应用创建2.2 目录结构2.3 子应用注册2.4 子应用视图逻辑2.4.1 编写视…...

AI大模型日报#0529:杨红霞创业入局“端侧模型”、Ilya左膀右臂被Claude团队挖走

导读&#xff1a;AI大模型日报&#xff0c;爬虫LLM自动生成&#xff0c;一文览尽每日AI大模型要点资讯&#xff01;目前采用“文心一言”&#xff08;ERNIE 4.0&#xff09;、“零一万物”&#xff08;Yi-34B&#xff09;生成了今日要点以及每条资讯的摘要。欢迎阅读&#xff0…...

达梦数据库

达梦数据库 达梦Docker部署 达梦Docker部署 1、下载链接 https://pan.baidu.com/s/1RI3Lg0ppRhCgUsThjWV6zQ?pwdjc62 2、docker启动命令 docker run -d -p 5236:5236 \ --restartalways \ --name dm8 \ -e LD_LIBRARY_PATH/app/dm8/bin \ -e LENGTH_IN_CHAR1 \ -e CASE_SENS…...

什么是Axios

2024年5月23日&#xff0c;周四上午 Axios 是一个基于Promise的HTTP客户端&#xff0c;用于浏览器和node.js环境。它提供了一个简单易用的API来发送HTTP请求&#xff0c;并支持Promise API&#xff0c;这使得异步请求变得容易处理。 Axios的一些主要特点包括&#xff1a; Pro…...