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

初识C++入门(1)

为什么会衍生出C++?

C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言则不合适。为了解决软件危机,20世纪80年代,计算机界提出了00P(object oriented programming: 面向对象)思想,支持面向对象的程序设计语言应运而生。


1982年,Biarne Stroustrup博士在C语言的基础上引入并扩充了面向对象的概念,发明了-种新的程序语言。为了表达该语言与C语言的渊源关系,命名为C++。因此: C++是基于C语言而产生的,它既可以进行C语言的过程化程序设计(这也是C++兼容C语言的原因),又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行面向对象的程序设计。

C++祖师爷的介绍

本贾尼·斯特劳斯特卢普(Bjarne Stroustrup,1950年6月11日-),丹麦人,计算机科学家,在德克萨斯A&M大学担任计算机科学的主席教授。他最著名的贡献就是开发了C++程序设计语言。

1982年,美国AT&T公司贝尔实验室的本贾尼博士在C语言的基础上引入并扩充了面向对象的概念,发明了—种新的程序语言。为了表达该语言与C语言的渊源关系,它被命名为C++。而本贾尼博士被尊称为C++语言之父。

1979 年,贝尔实验室的本贾尼等人试图分析 unix 内核的时候,试图将内核模块化,于是 C
语言的基础上进行扩展,增加了类的机制 ,完成了一个可以运行的预处理程序,称之为 C with
classes 。C++也是在不断更新的(完善和添加新语法等等)
C++还在不断发展, 但现在公司主流使用的还是C++98和C++11,目前重点掌握这两个即可,其他的版本语法可以等待工作以后随着对C++理解不断加深,再去了解其他版本语法特性。
C++的重要性
下图数据来自TIOBE编程语言社区202112月最新的排行榜,  在30多年的发展中,C/C++几乎一
致稳居前5。
在工作领域中C++的作用
1. 操作系统以及大型系统软件开发
所有操作系统几乎都是 C/C++ 写的,许多大型软件背后几乎都是 C++ 写的,比如:
Photoshop Office JVM(Java 虚拟机 )等,究其原因还是性能高,可以直接操控硬件。
2. 服务器端开发 后台开发:主要侧重于业务逻辑的处理,即对于前端请求后端给出对应的响应,现在主流采 用java ,但内卷化比较严重,大厂可能会有 C++ 后台开发,主要做一些基础组件,中间件、 缓存、分布式存储等。服务器端开发比后台开发跟广泛,包含后台开发,一般对实时性要求
比较高的,比如游戏服务器、流媒体服务器、网络通讯等都采用 C++ 开发的。
3. 游戏开发
PC 平台几乎所有的游戏都是 C++ 写的,比如:魔兽世界、传奇、 CS 、跑跑卡丁车等,市面上
相当多的游戏引擎都是基于 C++ 开发的,比如: Cocos2d 、虚幻 4 DirectX 等。三维游戏领
域计算量非常庞大,底层的数学全都是矩阵变换,想要画面精美、内容丰富、游戏实时性
搞,这些高难度需求无疑只能选 C++ 语言。比较知名厂商:腾讯、网易、完美世界、巨人网
络等。
4. 嵌入式和物联网领域
嵌入式:就是把具有计算能力的主控板嵌入到机器装置或者电子装置的内部,能够控制这些
装置。比如:智能手环、摄像头、扫地机器人、智能音响等。
谈到嵌入式开发,大家最能想到的就是单片机开发 ( 即在 8 位、 16 位或者 32 位单片机产品或者
裸机上进行的开发 ) ,嵌入式开发除了单片机开发以外,还包含在 soc 片上、系统层面、驱动
层面以及应用、中间件层面的开发。
常见的岗位有:嵌入式开发工程师、驱动开发工程师、系统开发工程师、 Linux 开发工程
师、固件开发工程师等。
知名的一些厂商,比如:以华为、 vivo oppo 、小米为代表的手机厂;以紫光展锐、乐鑫为
代表的芯片厂;以大疆、海康威视、大华、 CVTE 等具有自己终端业务厂商;以及海尔、海
信、格力等传统家电行业。
随着 5G 的普及,物联网 ( 即万物互联, ) 也成为了一种新兴势力,比如:阿里 lot 、腾讯 lot 、京
东、百度、美团等都有硬件相关的事业部。
5. 数字图像处理
数字图像处理中涉及到大量数学矩阵方面的运算,对 CPU 算力要求比较高,主要的图像处理
算法库和开源库等都是 C/C++ 写的,比如: OpenCV OpenGL 等,大名鼎鼎的 Photoshop
就是 C++ 写的。
6. 人工智能
一提到人工智能,大家首先想到的就是 python ,认为学习人工智能就要学习 python ,这个
是误区, python 中库比较丰富,使用 python 可以快速搭建神经网络、填入参数导入数据就
可以开始训练模型了。但人工智能背后深度学习算法等核心还是用 C++ 写的。
7. 分布式应用
近年来移动互联网的兴起,各应用数据量业务量不断攀升;后端架构要不断提高性能和并发
能力才能应对大信息时代的来临。在分布式领域,好些分布式框架、文件系统、中间组件等
都是 C++ 开发的。对分布式计算影响极大的 Hadoop 生态的几个重量级组件: HDFS
zookeeper HBase 等,也都是基于 Google C++ 实现的 GFS Chubby BigTable 。包括分
布式计算框架 MapReduce 也是 Google 先用 C++ 实现了一套,之后才有开源的 java 版本。
除了上述领域外,在:科学计算、浏览器、流媒体开发、网络软件等都是C++比较适合的场景,
作为一名老牌语言的常青树,C++一直霸占编程语言前5名,肯定有其存在的价值。
C++的介绍就到这里吧!你还记得学习C语言第一节课在电脑屏幕上输出hello world的喜悦感吗?
接下来我们以C++的形式输出hello world!
#include<iostream>
using namespace std;int main()
{cout << "hello world" << endl;return 0;
}

我们先不用看懂全部代码 比如using namespace std;cout <<endl是什么意思?

咱们不急,先听我娓娓道来,我会在下面解释到的,解开困惑的

第一个知识 命名空间 namespace

当我们用C语言运行这段代码会出现报错

#include<stdio.h>
#include<stdlib.h>
int rand = 10;int main()
{printf("%d ", rand);return 0;
}

为什么呢?因为在头文件<stdlib.h>库里面就包含了rand函数,我们再次使用rand定义了全局变量,因此会出现命名冲突,但C语言无法解决这种命名冲突问题,所以C++祖师爷为了解决命名冲突问题提出了namespace来解决。

命名空间一般用namespace+自己定义名字

比如我使用的是namespace as (as就是命名空间的名字)

用%p访问rand是因为rand是头文件里面的rand函数 编译器会推荐用%p访问

#include<stdio.h>
#include<stdlib.h>namespace as
{int rand = 10;
}
int main()
{printf("%p", rand);return 0;
}

那怎么访问命名空间里面的rand的值呢?

使用 : :域作用限定符来访问

#include<stdio.h>
#include<stdlib.h>namespace as
{int rand = 10;
}
int main()
{printf("%p", rand);printf("%d", as::rand);return 0;
}

命名空间相当于用围墙把rand"保护了起来"且留了一个入口,入口上面有牌匾"里面有恶犬 生人勿近 会咬人",只能有熟人进去喂"它(rand)"食物和与它互动。

#include<stdio.h>
#include<stdlib.h>namespace as
{int rand = 10;struct Node{struct Node* next;int val;};int Add(int left, int right){return left + right;}
}
int main()
{printf("%p\n", rand);printf("%d\n", as::rand);printf("%d\n", as::Add(2, 3));struct as::Node node;return 0;
}

假设同一个命名空间有相同的变量会怎么样呢?会不会自己和自己打一架?

实际上命名空间是可以嵌套的

#include<stdio.h>
#include<stdlib.h>namespace as
{int rand = 10;namespace as1{int rand = 30;}namespace as2{int rand = 20;}struct Node{struct Node* next;int val;};int Add(int left, int right){return left + right;}
}
int main()
{printf("%p\n", rand);printf("%d\n", as::rand);printf("%d\n", as::as1::rand);printf("%d\n", as::as2::rand);printf("%d\n", as::Add(2, 3));struct as::Node node;return 0;
}

比如你在公司需要写项目比如栈,为了防止与同事写的冲突就可以运用命名空间

Stack.h
#pragma once
#include<stdio.h>
#include<stdlib.h>namespace fk
{typedef struct Stack{int* a;int sz;int capacity;}ST;void STInit(ST* ps);void STPush(ST* ps,int x);
}test.cpp
#include"Stack.h"namespace fk
{void STInit(ST* ps){ps->a = NULL;ps->capacity = ps->sz = 0;}void STPush(ST* ps, int x){//....}
}int main()
{fk::ST st;fk::STInit(&st);fk::STPush(&st, 1);fk::STPush(&st, 2);fk::STPush(&st, 3);
}

那么它们运行起来不会冲突吗?

  同一个工程中允许存在多个相同名称的命名空间 , 编译器最后会合成同一个命名空间中。
一个工程中的 test.h 和上面 test.cpp 中两个fk 会被合并成一个。
当我们每次访问栈的时候都要使用命名空间名称+域作用限定符是不是有点太麻烦了?
有没有什么方法能直接访问呢?
这个时候就有了 usingnamesapce+命名空间名称 上面我们用C++输出hello world时候运用到了这个
test.cpp
#include"Stack.h"namespace fk
{void STInit(ST* ps){ps->a = NULL;ps->capacity = ps->sz = 0;}void STPush(ST* ps, int x){//....}
}using namespace fk;
int main()
{ST st;STInit(&st);STPush(&st, 1);STPush(&st, 2);STPush(&st, 3);
}

只需要在test.cpp写上一句 using namespace fk;即可

那么using namespace std;是什么意思呢?

std是C++官网标准库的命名空间,当我们展开std时,库里面的函数就可以使用了

那么std库里面的函数能随意展开吗?答案是否定的

在我们平常练习C++时可以展开自己定义的命名空间和std库的命名空间,但在实际工程上是不能随意展开的,容易出现冲突。

#include<iostream>是C++的头文件 类似于C语言的#include<stdio.h>

i=In O=Out 输入与输出 <<是流插入

C++为了有自己的换行符有了endl  endl=end line.

#include<iostream>int main()
{//<< 是流插入int a = 10;std::cout << a << "\n";int b = 20;double e = 13.14;// << 可以自动识别数据类型int c = 545;std::cout << b<< "\n";std::cout << e << "\n";std::cout << c << std::endl;return 0;
}

 

在我们不展开C++的库函数时,只能用域作用限定符来cout和endl,例如std::cout std::endl

但每次指定命名空间不方便,又害怕C++库里面函数全部暴露 又有风险冲突?

那么怎么办呢?我们可以指定展开命名空间 例如下图

#include<iostream>
using std::cout;
using std::endl;
int main()
{//<< 是流插入int a = 10;cout << a << "\n";int b = 20;double e = 13.14;// << 可以自动识别数据类型int c = 545;cout << b<< "\n";cout << e << "\n";cout << c << endl;return 0;
}

 

 

cout中的C=console(控制台) cin是流提取 相当于C语言的scanf

#include<iostream>
using std::cout;
using std::endl;
int main()
{int a = 20;int b = 30;cout << a << endl << b << endl;std::cin >> a >> b;return 0;
}

 

如果要控制数字精度怎么办呢?使用C,因为C++兼容C

#include<iostream>
using std::cout;
using std::endl;
int main()
{int a = 20;int b = 30;double c = 13.1424;cout << a << endl << b << endl;//控制精度用C 因为C++兼容Cprintf("%.1lf\n", c);return 0;
}

相关文章:

初识C++入门(1)

为什么会衍生出C&#xff1f; C语言是结构化和模块化的语言&#xff0c;适合处理较小规模的程序。对于复杂的问题&#xff0c;规模较大的程序&#xff0c;需要高度的抽象和建模时&#xff0c;C语言则不合适。为了解决软件危机&#xff0c;20世纪80年代&#xff0c;计算机界提出…...

使用Selenium的WebDriver进行长截图

from selenium import webdriver from PIL import Image from io import BytesIO # 创建浏览器驱动 driver webdriver.Chrome()# 打开网页 driver.get("https://www.douban.com/") # 替换为您要截图的网页URL def get_long_shot(driver,table_element):# 获取页面的…...

python+大数据校园卡数据分析 计算机竞赛

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于yolov5的深度学习车牌识别系统实现 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;4分工作量&#xff1a;4分创新点&#xff1a;3分 该项目较为新颖&am…...

【机器学习】sklearn降维算法PCA

文章目录 降维PCAsklearn中的PCA代码实践 PCA对手写数字数据集的降维 降维 如何实现降维&#xff1f;【即减少特征的数量&#xff0c;又保留大部分有效信息】 将那些带有重复信息的特征合并&#xff0c;并删除那些带无效信息的特征等等&#xff0c;逐渐创造出能够代表原特征矩…...

华为云云耀云服务器L实例评测|企业项目最佳实践之评测用例(五)

华为云云耀云服务器L实例评测&#xff5c;企业项目最佳实践系列&#xff1a; 华为云云耀云服务器L实例评测&#xff5c;企业项目最佳实践之云服务器介绍(一) 华为云云耀云服务器L实例评测&#xff5c;企业项目最佳实践之华为云介绍(二) 华为云云耀云服务器L实例评测&#xff5…...

Xcode升级到15.0 解决DT_TOOLCHAIN_DIR问题

根据个人开发遇到的问题做的总结&#xff0c;公司要求Xcode 14.2 &#xff0c;Swift 5.7开发&#xff0c;由于升级了Mac 14.0系统后&#xff0c;Xcode 14.2不能使用&#xff0c;解决方案目前有2个 一、在原来Xcode 14.2 的显示包内容&#xff0c;如图 二、升级到Xcode的15.0后…...

小谈设计模式(29)—访问者模式

小谈设计模式&#xff08;29&#xff09;—访问者模式 专栏介绍专栏地址专栏介绍 访问者模式角色分析访问者被访问者 优缺点分析优点将数据结构与算法分离增加新的操作很容易增加新的数据结构很困难4 缺点增加新的数据结构比较困难增加新的操作会导致访问者类的数量增加34 总结…...

【25】c++设计模式——>责任链模式

责任链模式定义 C中的责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;是一种行为型设计模式&#xff0c;它通过将请求沿着处理对象的链传递来避免把请求发送者与接收者耦合在一起。 责任链模式的主要思想是&#xff0c;通过将多个处理对象组成一条链&…...

GlobalTransactional

seata-spring的maven坐标&#xff1a; <dependency><groupId>io.seata</groupId><artifactId>seata-spring</artifactId><version>1.6.1</version> </dependency>GlobalTransactional注解的位置&#xff1a; io.seata.sprin…...

Android Studio运行kotlin项目,一直Read timed out

Android Studio运行kotlin项目&#xff0c;一直Read timed out 下载别人的Kotlin项目&#xff0c;导入as后&#xff0c;运行app一直失败&#xff0c;提示Read timed out&#xff0c;有2种解决办法 第一种方式&#xff1a;gradle.properties 修改kotlin项目种的gradle.proper…...

Excel 的单元格内容和单元格格式

文章目录 单元格内容单元格格式常规格式数字格式 单元格内容 文本&#xff1a;只要不是纯数字&#xff0c;Excel 都默认是文本格式。 在 Excel 中&#xff0c;逻辑值只有两个&#xff1a;True 和 False。 全选一片区域&#xff0c;按 Delet 键删除内容时&#xff0c;确实可以删…...

4大软件测试策略的特点和区别(单元测试、集成测试、确认测试和系统测试)

四大软件测试策略分别是单元测试、集成测试、确认测试和系统测试。 一、单元测试 单元测试也称为模块测试&#xff0c;它针对软件中的最小单元&#xff08;如函数、方法、类、模块等&#xff09;进行测试&#xff0c;以验证其是否符合预期的行为和结果。单元测试通常由开发人…...

armbian 安装mysql

1、执行安装指令 sudo apt-get update sudo apt-get install mysql-server 2、安装成功后&#xff0c;设置密码 ALTER USER root% IDENTIFIED WITH mysql_native_password BY ysw1234; flush privileges;3、设置允许远程连接并生效 use mysql; update user set host % whe…...

Ubuntu22常用软件

别存太多重要东西在Ubuntu &#xff0c;硬盘损坏就麻烦 Tweaks自定义UI sudo apt intall gnome-tweaks为了方便管理和添加&#xff0c;还需添加&#xff1a; sudo apt install gnome-shell-extension-prefs gnome-shell-extension-manager -y1.打开Extension应用&#xff0c;添…...

【CFD小工坊】浅水模型的边界条件

【CFD小工坊】浅水模型的边界条件 前言处理边界条件的原则边界处水力要素的计算水位边界条件单宽流量边界条件流量边界条件固壁边界条件 参考文献 前言 在浅水方程的离散及求解方法一篇中&#xff0c;我们学习了三角形网格各边通量值及源项的求解。但仍有一个问题没有解决&…...

电力物联网关智能通讯管理机-安科瑞黄安南

众所周知&#xff0c;网关应用于各种行业的终端设备的数据采集与数据分析&#xff0c;然后去实现设备的监测、控制、计算&#xff0c;为系统与设备之间建立通讯联系&#xff0c;达到双向的数据通讯。 网关可以实时监测并及时发现异常数据&#xff0c;同时自身根据用户规则进行…...

用Flask构建一个AI翻译服务

缘起 首先&#xff0c;看一段代码&#xff0c;只有几行Python语句却完成了AI翻译的功能。 #!/usr/bin/python3import sys from transformers import MarianMTModel, MarianTokenizerdef translate(word_list):model_name "Helsinki-NLP/opus-mt-en-zh"tokenizer …...

微信小程序引入阿里巴巴iconfont图标并使用

介绍 在小程序里&#xff0c;使用阿里巴巴的图标&#xff0c;如下所示: 使用方式 搜索自己需要的图标&#xff0c;然后将需要用到的图标加入购物车&#xff0c;如下图所示&#xff1a; 去右上角&#xff0c;点击购物车按钮&#xff1b;这里第一次使用&#xff0c;会有三个提…...

mysql面试题49:MySQL中不同text数据类型的最大长度

该文章专注于面试&#xff0c;面试只要回答关键点即可&#xff0c;不需要对框架有非常深入的回答&#xff0c;如果你想应付面试&#xff0c;是足够了&#xff0c;抓住关键点 面试官&#xff1a;MySQL中TEXT数据类型的最大长度 在MySQL中&#xff0c;TEXT数据类型用于存储较大…...

从虚拟电厂在上海的实践探索看企业微电网数字化的意义

安科瑞 华楠 作为典型的人口聚集、负荷密集区域&#xff0c;上海市具有外来电比例高、本地资源禀赋不足的特点。从发电侧角度来看&#xff0c;近年来上海风、光等新能源发电装机比例逐年提升&#xff0c;传统的火电逐渐成为调节性发电资源&#xff1b;从负荷侧角度来看上海以第…...

创建并初始化线程池

创建并初始化线程池–》threadpool.h, 创建并初始化&脱离(执行完后)子线程&#xff0c;每个子线程信号量wait阻塞【1】 创建套接字&#xff1a;int listenfd socket( PF_INET, SOCK_STREAM, 0 ); 端口复用&#xff1a;setsockopt( listenfd, SOL_SOCKET, SO_REUSEADDR, &a…...

【LeetCode热题100】--136.只出现一次的数字

136.只出现一次的数字 使用哈希表&#xff1a; class Solution {public int singleNumber(int[] nums) {Map<Integer,Integer> map new HashMap<>();for(int num:nums){Integer count map.get(num);if(count null){count 1;}else{count;}map.put(num,count);}…...

Java idea查看自定义注解的调用地方

Java idea查看自定义注解的调用地方...

ReLU激活函数

LeakyReLU激活函数的具体用法请查看此篇博客&#xff1a;LeakyReLU激活函数 ReLU&#xff08;Rectified Linear Unit&#xff09;激活函数是深度学习中最常用的激活函数之一&#xff0c;它的数学表达式如下&#xff1a; 在这里&#xff0c;(x) 是输入&#xff0c;(f(x)) 是输…...

【Android】adjustViewBounds 的理解和使用

理解 adjustViewBounds 是一个 ImageView 的属性&#xff0c;用于调整 ImageView 的边界以适应图像的尺寸。当设置为 true 时&#xff0c;ImageView 的边界将根据图像的宽高比例进行调整&#xff0c;以确保图像完全显示在 ImageView 内部。 理解和使用 adjustViewBounds 的步…...

Redis知识补充

大key删除 unLink scan分批删除 渐进式rehash Redis笔记&#xff1a;Redis的字典什么时候进行Rehash&#xff1f;_redis什么时候进行rehash-CSDN博客...

IIS 部署.NetCore,最细步骤

服务器安装环境 将.net core程序部署到IIS总体需要经过以下3个大步骤&#xff0c;其中在IIS上配置网站有些比较繁琐&#xff0c;我都会逐一给出详细步骤。 <1>安装IIS和.NetCORE运行时程序 <2>以文件的形式发布.NETCORE程序到指定目录 <3>IIS上面建立网站…...

4.查询用户的累计消费金额及VIP等级

思路分析&#xff1a; &#xff08;1&#xff09;按照user_id及create_date 分组求消费金额total_amount &#xff08;2&#xff09;开窗计算同user_id下的累计销售金额sum(total_amount) over(partition by user_id order by create_date ROWS BETWEEN UNBOUNDED PRECEDING AN…...

解决MySQL错误-this is incompatible with sql_mode=only_full_group_by

报错 Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘数据库名.表名.字段名’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_modeonly_full_group_by 原因 MySQL错误-t…...

UDP通信-广播、组播

UDP的三种通信方式 单播&#xff1a;单台主机与单台主机之间的通信。 广播&#xff1a;当前主机与所在网络中的所有主机通信。 组播&#xff1a;当前主机与选定的一组主机的通信。 UDP如何实现广播 使用广播地址&#xff1a;255.255.255.255 具体操作&#xff1a; 发送端…...

防疫网站网页设计/网络营销推广8种方法

词向量模型 Word2Vec Skip-gram 模型是图嵌入模型 Random Walk 中要使用到的模型&#xff0c;因此先学习 Word2Vec 神经网络语言模型 NNLM 目标&#xff1a;根据给定的词序列&#xff0c;预测下一个会出现的词&#xff0c;如给定 “他”&#xff0c;“是”&#xff0c;“一个…...

找阿里巴巴购买做网站的软件/关于进一步优化落实疫情防控措施

图是要求的输出范例程序要求输入一个大于等于5的奇数n然后输出一个和示例图类似的特殊蛇形矩阵 中心是0然后向外展开要求是不能用数组和stdio.h以外的lib已经想了整整一下午了 完全没有任何思路.求大神帮帮忙想一下思路,不用写代码,帮忙想想思路就行.P.S. 若覺得我的答案不佳或…...

网站如何做自适应/seo软件工具箱

ER Master 数据库设计工具 ER Master 是一个用于设计ER模型图的Eclipse插件。提供的功能包括&#xff1a;从数据库导入关系生成ER图&#xff0c;导出设计图&#xff0c;导出DDL数据定义语句等。目前完整支持的数据库包括 MySQL、PostgreSQL 和-Oracle (developing)-DB2 (develo…...

wordpress推荐文章/百度推广收费多少

论文翻译 论文作者讲解 解决问题 现有评价标准过高的评估模型效果&#xff08;现有标准一般是accuracy或者 F1 这种标准度量&#xff09; 解决对策 由软件测试方法得来灵感 建立 CheckList 流程框架&#xff1a; 测试一些独立的最小单元组件&#xff08;例如&#xff0c;区分词…...

一些js特效的网站推荐/西地那非

转载自点击打开链接 1.定义介绍 (1).XML定义 扩展标记语言 (Extensible Markup Language, XML) &#xff0c;用于标记电子文件使其具有结构性的标记语言&#xff0c;可以用来标记数据、定义数据类型&#xff0c;是一种允许用户对自己的标记语言进行定义的源语言。 XML使用DTD(d…...

中企动力做的网站后台如何登陆/推广普通话手抄报内容

Vue-Router 原理实现1.1Vue-Router 使用步骤1.2动态路由1.3嵌套路由1.4编程式导航1.5Hash 和 History 模式区别History 模式History 模式 - Node.jsHistory 模式 - nginx1.6Vue Router 实现原理Vue Router 模拟实现 ( History模式 )Vue Router - ConstructorVue Router - insta…...