C++简介

news2024/11/19 4:33:08

C++是一种计算机高级程序设计语言,由C语言扩展升级而产生  ,最早于1979年由本贾尼·斯特劳斯特卢普在AT&T贝尔工作室研发。

C++既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计。

C++拥有计算机运行的实用性特征,同时还致力于提高大规模程序的编程质量与程序设计语言的问题描述能力。

C++的发展历程

  1970年,AT&T贝尔实验室的工作人员D.Ritchie和K.Thompson共同研发了C语言。研制C语言的初衷是用它编写UNIX系统程序,因此,实际上C语言是UNIX的“副产品”。

  1971年,瑞士联邦技术学院N.Wirth教授发明了第一个结构化的编程语言Pascal。

  20世纪70年代中期,本贾尼·斯特劳斯特卢普在剑桥大学计算机中心工作。斯特劳斯特卢普希望开发一个既要编程简单、正确可靠,又要运行高效、可移植的计算机程序设计语言。而以C语言为背景,以Simula思想为基础的语言,正好符合斯特劳斯特卢普的初衷和设想。

  1979年,本贾尼·斯特劳斯特卢普到了AT&T贝尔实验室,开始从事将C改良为带类的C(C with classes)的工作。、1983年,该语言被正式命名为C++。

  1985年、1990年和1994年,C++先后进行3次主要修订。

  C++的标准化工作于1989年开始,并成立了一个ANSI和ISO(International Standards Organization)国际标准化组织的联合标准化委员会。

  1994年1月25曰,联合标准化委员会提出了第一个标准化草案。在该草案中,委员会在保持斯特劳斯特卢普最初定义的所有特征的同时,还增加了部分新特征。

  在完成C++标准化的第一个草案后不久,亚历山大·斯特潘诺夫(Alexander Stepanov)创建了标准模板库(Standard Template Library,STL)。在通过了标准化第一个草案之后,联合标准化委员会投票并通过了将STL包含到C++标准中的提议。STL对C++的扩展超出了C++的最初定义范围。虽然在标准中增加STL是个很重要的决定,但也因此延缓了C++标准化的进程。

  1997年11月14日,联合标准化委员会通过了该标准的最终草案,

  1998年,C++的ANSI/IS0标准被投入使用。

C++语言标准及更新

自C++的ANSI/IS0标准投用以来,共进行过5次更新:

                                C++语言标准更新记录

标准版本

发布时间

正式名称

更新内容

C++ 03

2003年

ISO/IEC 14882:2003

对C++ 98版本的漏洞做了部分修改。 [14] 

C++ 11

2011年8月12日

ISO/IEC 14882:2011

对容器类的方法做了三项主要修改:

1、新增了右值引用,可以给容器提供移动语义。

2、新增了模板类initilizer_list,因此可将initilizer_list作为参数的构造函数和赋值运算符。

3、新增了可变参数模板(variadic template)和函数参数包(parameter pack),可以提供就地创建(emplacement)方法。 [15] 

C++ 14

2014年8月18日

ISO/IEC 14882:2014

C++11的增量更新。主要是支持普通函数的返回类型推演,泛型lambda,扩展的lambda捕获,对constexpr函数限制的修订,constexpr变量模板化等。 [18] 

C++ 17

2017年12月6日

ISO/IEC 14882:2017

新增UTF-8 字符文字、折叠表达式(fold expressions):用于可变的模板、内联变量(inline variables):允许在头文件中定义变量;在if和switch语句内可以初始化变量;结构化绑定(Structured Binding):for(auto [key,value] : my_map){…};类模板参数规约(Class Template Argument Deduction):用pair p{1, 2.0}; 替代pair{1, 2.0};;>;static_assert的文本信息可选;删除trigraphs;在模板参数中允许使用typename(作为替代类);来自 braced-init-list 的新规则用于自动推导;嵌套命名空间的定义;允许命名空间和枚举器的属性;新的标准属性:[[fallthrough]], [[maybe_unused]] 和 [[nodiscard]];对所有非类型模板参数进行常量评估;Fold表达式,用于可变的模板;A compile-time static if with the form if constexpr(expression);结构化的绑定声明,允许auto [a, b]=getTwoReturnValues()。 [24] 

C++ 20

2020年12月7日

ISO/IEC 14882:2020

新增模块(Modules)、协程(Coroutines)、范围 (Ranges)、概念与约束 (Constraints and concepts)、指定初始化 (designated initializers)、操作符“<=> != ==”;constexpr支持:new/delete、dynamic_cast、try/catch、虚拟、constexpr向量和字符串;计时:日历、时区支持。

C++编程开发

  C++集成开发环境

截至2014年3月,C++共有12个主流集成开发环境:

Visual Studio(Visual C++)

Dev C++

C++ Builder

kDevelop

Anjuta

Code::Blocks 

Visual Mingw

Ideone

Eclipse CDT

Compilr

Code Lite

Netbeans C++

  C++编译器

截至2014年3月,C++共有5款主流编译器:

Ultimate++

Digital Mars

C-Free

MinGW

Tiny C Compiler

 C++语言特点

  • 与C语言的兼容性

  C++与C语言完全兼容,C语言的绝大部分内容可以直接用于C++的程序设计,用C语言编写的程序可以不加修改地用于C++。 [22] 

  • 数据封装和数据隐藏

  在C++中,类是支持数据封装的工具,对象则是数据封装的实现。C++通过建立用户定义类支持数据封装和数据隐藏。

  在面向对象的程序设计中,将数据和对该数据进行合法操作的函数封装在一起作为一个类的定义。对象被说明为具有一个给定类的变量。每个给定类的对象包含这个类所规定的若干私有成员、公有成员及保护成员。完好定义的类一旦建立,就可看成完全封装的实体,可以作为一个整体单元使用。类的实际内部工作隐藏起来,使用完好定义的类的用户不需要知道类的工作原理,只要知道如何使用它即可。

  • 支持继承和重用

  在C++现有类的基础上可以声明新类型,这就是继承和重用的思想。通过继承和重用可以更有效地组织程序结构,明确类间关系,并且充分利用已有的类来完成更复杂、深入的开发。新定义的类为子类,成为派生类。它可以从父类那里继承所有非私有的属性和方法,作为自己的成员。

  • 多态性

  采用多态性为每个类指定表现行为。多态性形成由父类和它们的子类组成的一个树型结构。在这个树中的每个子类可以接收一个或多个具有相同名字的消息。当一个消息被这个树中一个类的一个对象接收时,这个对象动态地决定给予子类对象的消息的某种用法。多态性的这一特性允许使用高级抽象。

  继承性和多态性的组合,可以轻易地生成一系列虽然类似但独一无二的对象。由于继承性,这些对象共享许多相似的特征。由于多态性,一个对象可有独特的表现方式,而另一个对象有另一种表现方式。

C++工作原理

  C++语言的程序开发环境,为了方便测试,将调试环境做成了解释型。即开发过程中,以解释型的逐条语句执行方式来进行调试,以编译型的脱离开发环境而启动运行的方式来生成程序最终的执行代码

  开发C++应用程序,需要经过编写源程序、编译、连接程序生成可执行程序、运行程序四个步骤  。生成程序是指将源码(C++语句)转换成一个可以运行的应用程序的过程。如果程序编写正确,那么通常只需按一个功能键,即可完成该过程。

  第一步对程序进行编译,这需要用到编译器(compiler)。编译器将C++语句转换成机器码(也称为目标码);如果该步骤成功执行,下一步就是对程序进行链接,这需要用到链接器(linker)。链接器将编译获得机器码与C++库中的代码进行合并。C++库包含了执行某些常见任务的函数(“函数”是子程序的另一种称呼)。例如,一个C++库中包含标准的平方根函数sqrt,所以不必亲自计算平方根。C++库中还包含一些子程序,它们把数据发送到显示器,并知道如何读写硬盘上的数据文件。

C++语言基础

  C++基本类型

C++语言数据类型可以分为两大类:基本类型和引用类型。基本类型是指不能再分解的数据类型,其数据在函数的调用中是以传值方式工作的;引用类型有时也称复合类型,它是可以分解为基本类型的数据类型,其数据在函数调用中是以传址方式来工作的。 [10] 

整型

1、整数常量

整数常量是不带小数的数值,用来表示正负数。例2—2中Ox55、0x55ff、1000000都是c++语言的整数常量。

c++语言的整数常量有三种形式:十进制、八进制、十六进制。

(1)十进制整数是由不以0开头的0~9的数字组成的数据。

(2)八进制整数是由以0开头的0~7的数字组成的数据。

(3)十六进制整数是由以0x或0x开头的0~9的数字及A~F的字母(大小写字母均可)组成的数据。

例如:

0,63,83是十进制数。

00,077,0123是八进制数。

0x0,Ox0,0x53,0x53,0x3f,0x3f是十六进制数。

整数常量的取值范围是有限的,它的大小取决于此类整型数的类型,与所使用的进制形式无关。

2、整型变量类型

整型变量类型有byte,short,int,long四种说明符,它们都是有符号整型变量类型。

(1)byte类型

byte类型说明一个带符号的8位整型变量。由于不同的机器对多字节数据的存储方式不同,可能是从低字节向高字节存储,也可能是从高字节向低字节存储。这样,在分析网络协议或文件格式时,为了解决不同机器上的字节存储顺序问题,用byte类型来表示数据是合适的。

(2)short类型

short类型说明一个带符号的16位整型变量。short类型限制了数据的存储应为先高字节,后低字节。

(3)int类型

int类型说明一个带符号的32位整型变量。int类型是一种最丰富、最有效的类型。它最常用于计数、数组访问和整数运算。

(4)long类型

long类型说明一个带符号的64位整型变量。对于大型计算,常常会遇到很大的整数,并超出int所表示的范围,这时要使用long类型。

浮点型

1、浮点数常量

浮点数是带有小数的十进制数,可用一般表示法或科学记数法表示。0.23f、0.7e-3都是c++语言的浮点数常量。

(1)一般表示法:十进制整数+小数点+十进制小数。

(2)科学记数法:十进制整数+小数点+十进制小数+E(或e)+正负号+指数。

例如:3.14159,0.567,9777.12是一般表示法形式,1.234e5,4.90867e-2是科学记数法形式。

c++语言的浮点数常量在机器中有单精度和双精度之分。单精度以32位形式存放,用f/F做后缀标记(可以省略);双精度则以64位形式存放。当一个浮点数常量没有特别指定精度时,则它为双精度浮点数常量。

2、浮点变量类型

浮点变量也称实数变量,用于需要精确到小数的函数运算中,有float和double两种类型说明符。

(1)float类型

float类型是一个位数为32位的单精度浮点数。它具有运行速度较快,占用空间较少的特点。

(2)double类型

double类型是一个位数为64的双精度浮点数。双精度数在某些具有优化和高速运算能力的现代处理机上运算比单精度数快。双精度类型double比单精度类型float具有更高的精度和更大表示范围,常常使用。

字符型

1、字符型常量

字符型常量是指由单引号括起来的单个字符。

例如:’a’,’A’,’z’,‘$’,’?’。

注意:’a’和’A’是两个不同的字符常量。

除了以上形式的字符常量外,c++语言还允许使用一种以“\”开头的特殊形式的字符常量。这种字符常量称为转义字符,用来表示一些不可显示的或有特殊意义的字符。

2、字符型变量

字符型变量的类型说明符为char,它在机器中占8位,其范围为0~255。

布尔型

布尔常量只有两个值:“true”和“false”,表示“真”和“假”,均为关键词,在机器中位长为8位。

布尔型变量的类型说明符为booI,用来表示逻辑值。

  C++运算符与表达式

  C++语言中定义了丰富的运算符,如算术运算符、关系运算符、逻辑运算符等等,有些运算符需要两个操作数,使用形式为:<操作数1>运算符<操作数2>,这样的运算符称为二元运算符(或二目运算符)。另一些运算符只需要一个操作数,称为一元运算符(或单目运算符)。

  运算符具有优先级与结合性。当一个表达式包含多个运算符时,先进行优先级高的运算,再进行优先级低的运算。如果表达式中出现了多个相同优先级的运算,运算顺序就要看运算符的结合性了。所谓结合性,是指当一个操作数左右两边的运算符优先级相同时,按什么样的顺序进行运算,是自左向右,还是自右向左。例如,我们熟悉的算术表达式6+5-2中,“+”、 “-”是同级运算符,那么是先算5-2,还是先算6+5?这就取决于算术运算符的结合性。由于算术运算符的结合性为自左向右,所以应先算6+5,然后再算11-2。

算术运算符与算术表达式

  C++中的算术运算符包括基本的算术运算符和自增、自减运算符。由算术运算符、操作数和括号构成的表达式称为算术表达式。

  基本算术运算符有:+()、-(减或负号)、*(乘)、/(除)、%(取余)。其中“-”作为负号时为一元运算符,其余都为二元运算符。这些基本算术运算符的意义与数学中相应符号的意义是一致的。它们之间的相对优先级关系与数学中的也是一致的,即先乘除、后加减,同级运算自左向右进行。使用算术运算符要注意以下几点:

1、“%”是取余运算,只能用于整型操作数。表达式a%b的结果为a/b的余数。 “%”的优先级与“/”相同。

2、当“/”用于两整型操作数相除时,其结果取商的整数部分,小数部分被自动舍弃。因此,表达式1/2的结果为0,这一点需要特别注意。

3、C++中的“++” (自增)、 “--” (自减)运算符是使用方便且效率很高的两个运算符,它们都是一元运算符。

  这两个运算符都有前置和后置两种使用形式,无论写成前置或后置的形式,它们的作用都是将操作数的值增1(减1)后,重新写回该操作数在内存中的原有位置。所以,如果变量i原来的值是1,计算表达式i++后,表达式的结果为2,并且i的值也被改变为2。但是,当自增、自减运算的结果要被用于继续参与其它操作时,前置与后置时的情况就完全不同。例如,如果i的值为l,则下列两条语句的执行结果不同:

1

2

cout<<i++;

cout<<++i;

  第一条语句首先输出i当前的值1,然后i自增,其值变为2;第二条语句首先使i自增为2,然后输出i的值2。

赋值运算符与赋值表达式

  C++提供了几个赋值运算符,最简单的赋值运算符就是“=”。带有赋值运算符的表达式被称为赋值表达式。例如,m=m+6就是一个赋值表达式。赋值表达式的作用就是将等号右边表达式的值赋给等号左边的对象。赋值表达式的类型为等号左边对象的类型,表达式的结果为等号左边对象被赋值后的值,运算的结合性为自右向左。请看下列赋值表达式的例子。

1

  n=1

表达式值为1。

1

  a=b=c=2

这个表达式从右向左运算,在c被更新为2后,表达式c=2的值为2,接着b的值被更新为2,最后a被赋值为2。

1

a=3+(c=4)

表达式值为7,a的值为7,c为4。

除了“=”以外,C++还提供了10种复合的赋值运算符:+=,-=,*=,/=,%=,<<=,>>=,&=,“=,|=。其中,前五个运算符是赋值运算符与算术运算符复合而成的,后五个是赋值运算符与位运算符复合而成的。关于位运算,稍后再做介绍。这里10种运算符的优先级与“=”相同,结合性也是自右向左。现在举例说明复合赋值运算符的功能。

1

2

 b+=2;//等价于b=b+2

 x*=y+3;//等价于x=x*(y+3)

1

如果在赋值表达式后面加上分号,便成为了赋值语句。例如:

b=b+2:便是一个赋值语句,它实现的功能与赋值表达式相同。赋值表达式与赋值语句的不同点在于:赋值表达式可以作为一个更复杂表达式的一部分,继续参与运算;而赋值语句不能。

逗号运算符与逗号表达式

在C++中,逗号也是一个运算符,它的使用形式为:

<表达式1>,<表达式2>,…,<表达式n>求解顺序为,先求解表达式1,再求解表达式2,最后求解表达式n的值。逗号表达式的最终结果为表达式n的值。例如:

1

 x=2*5,x*4

表达式的结果为40。

关系运算符和关系表达式

关系运算符即比较符。

用关系运算符将两个表达式连接起来就是关系表达式。关系表达式是一种最简单的逻辑表达式。例如:

1

2

3

 x>5

 x+y<=20

 c==a+b

注:“==”(等于)是连续的两个等号,勿误写为赋值运算符“=”。

关系表达式一般用于判断是否符合某一条件。关系表达式的结果类型为bool,值只能是true或false。条件满足为true,条件不满足为false。例如,当x=t时,x>5的结果就为false。

逻辑运算符与逻辑表达式

用逻辑运算符将简单的关系表达式连接起来构成较复杂的逻辑表达式。逻辑表达式的结果类型也为bool,值只能为true或false。

“!”是一元运算符,使用形式是: !操作数。非运算的作用是对操作数取反。如果操作数a的值为true,则表达式!a的值为false:如果操作数a的值为false,则表达式!a的值为true。

“&&”是二元运算符。“&&”运算的作用是求两个操作数的逻辑与。只有当两个操作数的值都为true时,与运算的结果才为true,其它情况下与运算的结果均为false。

“||”也是二元运算符。 “||”运算的作用是求两个操作数的逻辑或。只有当两个操作数的值都为false时,或运算的结果才为false,其它情况下或运算的结果均为true。

  C++类和对象

  类所表示的一组对象十分相似,可以作为模板来有效的创建对象,利用类可以产生很多的对象类所代表的事物或者概念都是抽象的。在存取Private类型数据或者函数的时候,只有类本身声明的函数才是被允许的。类在与外部连接时,利用的就是Public共有类型函数,任何外部函数的访问都是运行的。

  对象主要是对客观事物的某个实体进行描述,它作为一个单位,共同组成了系统,它的组成是一组属性和一组服务,这组服务操作于这组属性。属性和服务是对象构成众多要素中的两种,属性的实质是一个数据项,主要是对对象静态特性进行描述,服务的实质是一个操作序列,主要是对对象动态特征进行描述。

  C++关键字

  关键字(keyword)是整个语言范围内预先保留的标识符,每个C++关键字都有特殊的含义。经过预处理后,关键字从预处理记号(preprocessing-token)中区出来,剩下的标识符作为记号(token),用于声明对象、函数、类型、命名空间等。不能声明与关键字同名的标识符。

  各个版本的ISO C++都规定以下划线接大写字母起始的标识符保留给实现。编译器可以用这些保留标识符作为扩展关键字,这不保证可移植性。以下讨论ISO C++所保留的关键字。

  ISO C++ 98关键字共63个,按标准排版如下:

ISO C++ 98关键字表

asm

do

if

return

typedef

auto

double

inline

short

typeid

bool

dynamic_cast

int

signed

typename

break

else

long

sizeof

union

case

enum

mutable

static

unsigned

catch

explicit

namespace

static_cast

using

char

export

new

struct

virtual

class

extern

operator

switch

void

const

false

private

template

volatile

const_cast

float

protected

this

wchar_t

continue

for

public

throw

while

default

friend

register

true

delete

goto

reinterpret_cast

try

C++语言评价

  C++语言是对C语言的扩充,从Simula中吸取了类,从ALGOL语言中吸取了运算符的一名多用、引用和在分程序中任何位置均可说明变量,综合了Ada语言的类属和Clu语言的模块特点,形成了抽象类,从Ada Clu和ML等语言吸取了异常处理,从BCPL语言中吸取了用//表示注释C++语言保持了C语言的紧凑灵活、高效以及易于移植性强等优点,它对数据抽象的支持主要在于类概念和机制,对面向对象风范的支持主要通过虚拟机制函数因C++语言既有数据抽象和面向对象能力,运行性能高,加上C语言的普及,而从C语言到C++语言的过渡较为平滑,以及C++语言与C语言的兼容程度可使数量巨大的C语言程序能方便地在C++语言环境中复用,使C++语言在短短几年内能流行。(计算机软件专家王汝传 评)

  作为最受欢迎的编程语言之一,C++带给开发者们最大的惊喜便是其强大的特性。一方面跟C兼容,可以直面系统底层API,SDK,另一方面提供了很多范式,足够的抽象能力,面向对象,操作符重载,模板等。

 资料来源:

  百度:

C++_百度百科C++是一种计算机高级程序设计语言,由C语言扩展升级而产生,最早于1979年由本贾尼·斯特劳斯特卢普在AT&T贝尔工作室研发。C++既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计。C++拥有计算机运行的实用性特征,同时还致力于提高大规模程序的编程质量与程序设计语言的问题描述能力。https://baike.baidu.com/item/C%2B%2B/99272

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/125021.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机英文论文怎么做降重? - 易智编译EaseEditing

人工降重一定要找靠谱的机构做。 降重是很耗费精力和时间的学术服务。 而那些没有口碑且不专业的商家&#xff0c;真的会花费那么多心思来仔细琢磨你的论文吗&#xff1f; 那些没有声誉的非专业商家给论文降重会产生很多弊端&#xff1a; &#xff08;1&#xff09;他们为了…

内网穿透你真的了解吗?

前言 内网穿透作为程序员常用的调试手段之一&#xff0c;我们可以通过在个人电脑上运行花生壳或者 frp 等方式&#xff0c;让他人访问我们本地启动的服务&#xff0c;而且这种访问可以不受局域网的限制&#xff0c;当我们使用ngrok,frp等开源框架时&#xff0c;你是否有好奇过…

力扣sql入门篇(一)

力扣sql入门篇(一) 1 大的国家 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 SELECT name,population,area FROM World WHERE area>3000000 OR population>250000001.3 运行截图 2 可回收且低碳的产品 2.1 题目内容 2.1.1 基本题目信息 2.…

c++使用icu国际化(i18n)

icu International Components for Unicode&#xff0c;https://github.com/unicode-org/icu.git https://icu.unicode.org/ 帮助文档&#xff1a; https://unicode-org.github.io/icu/userguide/icu/howtouseicu.html i18n&#xff0c;Internationalization (in/i18n) libra…

第五章:开机,重启和用户登录注销-[实操篇]

一&#xff1a;开机&重启命令 1.1基本介绍 shutdown shutdown -h now&#xff1a;表示立即关机 shutdown -h 1 : 表示1分钟后关机 shutdown -r now : 立即重启 halt 就是直接使用&#xff0c;效果等价于关机 reboot 就是直接使用&#xff0c;效果等价于关机 syn &…

uTools V3.3.0 效率工具集

前言 uTools是一款基于electron开发的工具集软件&#xff0c;通过快捷唤醒搜索&#xff0c;直接打开各种功能&#xff0c;非常方便。 uTools uTools是一个极简、插件化、跨平台的现代化桌面软件。通过自由选配丰富的插件&#xff0c;打造你得心应手的工具集合。 通过快捷键…

制作gltf动态夜景模型

kele 前言 要制作一个充满科技感的场景&#xff0c;离不开动画特效。众所周知&#xff0c;Unity软件可制作各种炫酷动画效果&#xff0c;如果将Unity中的动画添加到WebGL网页项目中&#xff0c;那一定会非常美妙吧~接下来小编将介绍如何通过Unity制作纹理动画&#xff0c;并导…

RISC-V IDE MRS使用笔记(七) :常用开发技巧汇总

RISC-V IDE MRS使用笔记(七) &#xff1a;常用开发技巧汇总 Q1: MRS调试时如何查看外设寄存器内容&#xff1f; A1: 在调试配置界面添加相应的.svd文件。 Q2: MRS如何调用数学库? A2: #include ”math.h”头文件,并在工程属性页面增加”m”参数。 Q3: 如何设置MRS调试前默认…

还在对比IT培训机构,行内人告诉你怎么比?

还在对比IT培训机构&#xff0c;行内人告诉你怎么比&#xff1f;因为身处IT培训行业6年多点时间 &#xff0c;从讲师到校区经营的成长履历中。见识过众多机构的运营和发展&#xff0c;当然也包含我所在的正厚软件。平时在知乎上看的多&#xff0c;自然推荐的关于机构对比的话题…

蓝牙无线运动耳机排行榜、口碑最好的运动蓝牙耳机推荐

越来越多的人开始喜欢蓝牙耳机的便携性&#xff0c;尤其对于运动的慢跑族&#xff0c;蓝牙耳机更为方便携带和佩戴&#xff0c;毕竟没有了线束的烦恼&#xff0c;目前蓝牙耳机市场很大&#xff0c;用户人群很多&#xff0c;我体验过的这类产品比较多&#xff0c;如何挑选一款满…

MySQL5.7安装配置教程-Windows(企业常用版)超详细

引言 MySQL 5.7 为公司、企业常用的MySQL版本。 正在学习或正在工作的小伙伴推荐相关教程按照5.7的版本来学习、操作。 1. 下载MySQL 阿里云盘不限速高速下载地址&#xff1a; https://www.aliyundrive.com/s/YTMa5LfSFB2 因为阿里云盘不支持zip压缩包的分享&#xff0c;我用…

【财务】FMS财务管理系统---应付结算

本篇文章中&#xff0c;笔者对应付结算各个部分进行了梳理和分析&#xff0c;与大家分享。 前面相继介绍了财务系统的组成、财务数据流转、应收管理、质保金、预付款、费用管理以及合同管理。 我个人觉得应付结算管理部分的逻辑是整个FMS财务管理系统中较为复杂的一部分&#…

APP测试面试题汇总

一、基础篇 1、请介绍一下&#xff0c;APP测试流程&#xff1f; APP测试流程与web测试流程类似&#xff0c;分为如下七个阶段&#xff1a; 1.根据需求说明书编写测试计划&#xff1b; 2.制定测试方案&#xff0c;主要是测试任务、测试人员和测试时间的分配&#xff1b; 3.…

Vue3 Composition API: 对比ref和reactive

Vue2 回顾 首先回顾一下在Vue2中我们是如何创建一个响应式数据 (reactive data)的&#xff1a; Vue3新特性 ref的使用 而在Vue3中&#xff0c;我们可以用Composition API: ref 来改写上述代码&#xff1a; ref 的作用就是将一个原始数据类型&#xff08;primitive data t…

NPM 2FA双重认证的设置方法

NPM在使用用户名和密码登录后&#xff0c;他觉得还不是很安全&#xff0c;需要用一个手机软件来生成一个随机验证码&#xff0c;两者同步&#xff0c;来做二次验证。类似于手机银行的优盾或者验证码验证。 双重验证&#xff1a;标准验证方法&#xff0c;其中一个因素是密码。 …

gdb调试跟踪代码

编译 用gcc/g编译源程序的时候&#xff0c;编译后的可执行文件不会包含源程序代码&#xff0c;如果要使用gdb调试的话&#xff0c;编译的时候要加 -g 的参数。 gcc test.c -o test -g调试 gdb test常用命令&#xff1a; &#xff08;gdb&#xff09;help&#xff1a;查看命令…

jira-dev-tool插件安装失败的解决方法

最近&#xff0c;在运行【React React Hook TS 最佳实践仿 Jira 企业级项目】的时候&#xff0c;安装jira-dev-tool 插件出现问题&#xff0c;参考&#xff1a;https://www.npmjs.com/package/jira-dev-tool。解决方法&#xff1a;在项目中执行&#xff1a; npx msw init pu…

Layer2 实现方式之 Rollup

一. 1. Rollup 简介 Rollup 是类似于 Plasma 的第 2 层扩展解决方案&#xff1a;单个主链合约持有所有资金和对更大“侧链”状态&#xff08;通常是账户、余额及其状态的 Merkle 树&#xff09;的简洁加密承诺。侧链状态由链下用户和运营商维护&#xff0c;不依赖 L1 存储&…

C语言文件读写

上一章我们讲解了 C 语言处理的标准输入和输出设备。本章我们将介绍 C 程序员如何创建、打开、关闭文本文件或二进制文件。 一个文件&#xff0c;无论它是文本文件还是二进制文件&#xff0c;都是代表了一系列的字节。C 语言不仅提供了访问顶层的函数&#xff0c;也提供了底层…

linux------基本操作指令(1)

1)JAVA是一个跨平台的编程语言&#xff0c;多线程编程&#xff0c;网络编程在JAVA标准库里面本身就有 2)C的标准库相比于JAVA的标准库还是要弱一些&#xff0c;网络编程已经不支持了 3)linux是世界上第一大操作系统 李纽克斯 李娜克斯 李呢克斯 李妮克斯 一:背景知识 1)内网I…