- 博客(225)
- 资源 (16)
- 收藏
- 关注
原创 【git使用】将一个仓库的分支代码推送到另一个仓库的分支上
本文介绍了如何将Git老项目分支代码推送到新项目分支的操作步骤:1)切换到老项目的aaa分支;2)添加新仓库远程地址origin_new;3)强制推送老项目aaa分支到新项目bbb分支(git push -f origin_new aaa:bbb);4)删除临时添加的远程地址origin_new。该流程适用于基于已有项目代码进行新功能开发时迁移特定分支代码的场景。
2025-08-12 14:30:53
128
原创 【和春笋一起学C++】(三十三)名称空间的其他特性
本文介绍了C++中嵌套名称空间和未命名名称空间的使用。对于嵌套名称空间,展示了如何通过using namespace electronicEquipment::computer访问内部成员,并说明using指令具有传递性(如electronicEquipment包含book时自动包含其成员)。未命名名称空间的特点是其成员作用域限于声明区域,不能在其他文件中使用,可作为静态内部变量的替代方案。文章通过示例代码演示了这些特性,并指出最新C++标准不推荐在名称空间和全局作用域使用static关键字。
2025-08-09 17:43:34
409
原创 【和春笋一起学C++】(三十二)名称空间
本文介绍了C++名称空间的定义、特点和使用方法。名称空间通过namespace关键字创建,能够避免不同名称空间中的同名标识符冲突。访问名称空间可通过作用域解析符"::",或使用using声明和using编译指令。using声明将特定名称引入当前作用域,而using编译指令使整个名称空间可用。文章比较了二者的区别:using声明可能导致重定义错误,而using编译指令允许局部名称覆盖名称空间名称。最后给出了使用建议:优先使用作用域解析符或using声明,避免在头文件中使用using编译指令
2025-08-07 22:51:06
735
原创 【和春笋一起学C++】(三十一)动态内存
由new分配的400个字节(假设float占4个字节)的内存将一直保留在内存中,直到使用delete将其释放或程序结束。但fp指针在包含该指针的函数结束后就被释放掉了,如果想要使用这400个字节中的内容,则必须将pf的地址通过参数或返回值传递出来。使用new操作符分配的内存称为动态内存,动态内存由操作符new和delete控制,不受作用域和链接性的规则控制,动态内存可以在一个函数中分配,在另一个函数中释放。C++编译器通常使用3块独立的内存,一块用于静态变量,一块用于自动变量,一块用于动态变量。
2025-08-06 16:53:49
177
原创 【和春笋一起学C++】(三十)函数链接性
本文介绍了C++中函数的链接性问题。默认情况下函数具有外部链接性,可在各文件间共享;使用static关键字可将其设为内部链接性,仅限当前文件使用。文章通过三文件示例(demo.cpp/test.h/test.cpp)展示了静态函数如何避免重定义问题,并说明编译器查找函数定义的顺序:先当前文件,再其他程序文件,最后库文件。同时指出C++"单定义规则"对外部链接函数的限制,以及内联函数定义可置于头文件的特性。
2025-07-30 15:01:46
403
原创 【和春笋一起学C++】(二十九)存储说明符和限定符
本文介绍了C++中的存储说明符和cv限定符。存储说明符包括auto(自动变量)、register(建议寄存器存储)、static(静态存储或内部链接性)、extern(引用声明)和mutable(允许修改const结构成员)。cv限定符包含const(禁止修改)和volatile(防止优化)。重点说明const限定符在不同作用域的表现:作用于全局变量时使其具有内部链接性,允许多文件包含同名常量;作用于局部变量时仅在该代码块内有效。文章通过代码示例展示了mutable关键字如何突破const限制修改结构成员。
2025-07-25 14:58:07
781
原创 【和春笋一起学C++】(二十八)静态存储持续性
本文介绍了C++中三种静态存储持续性变量的特性:1. 外部链接性变量(全局变量),可在多文件程序中共享使用;2. 内部链接性变量(static修饰),仅限当前文件使用;3. 无链接性变量(函数内static修饰),仅限定义代码块使用。三种静态变量都具有程序生命周期,未初始化时默认为0,且只能使用常量表达式初始化。文章通过多个示例展示了不同链接性变量的作用域、初始化特点及使用方法,包括extern声明、同名变量隐藏规则和作用域解析操作符的应用。特别说明了静态局部变量只初始化一次的特性,与自动变量的区别。
2025-07-24 16:20:43
874
原创 【和春笋一起学C++】(二十七)自动存储持续性
本文系统介绍了C++中的存储持续性、作用域及链接性概念。重点阐述了自动存储持续性的特性,包括自动变量的初始化、堆栈管理机制以及寄存器变量的使用。文章详细说明了三种存储持续性(自动、静态、动态)的区别,解析了变量作用域的范围规则,并通过代码示例展示了自动变量在函数中的行为特点。特别指出编译器使用堆栈管理自动变量时的后进先出机制,以及寄存器变量通过register关键字优化访问速度的特性。全文为理解C++变量存储机制提供了清晰的技术框架。
2025-07-20 08:55:44
882
原创 【和春笋一起学C++】(二十六)程序设计与编译
摘要:本文介绍了程序设计的一般准则,重点讲解了多文件程序的组织方法。程序通常分为头文件(包含声明)和源代码文件(包含定义和调用)。文章通过直角坐标与极坐标转换的实例,展示了头文件防护机制(#ifndef)的使用方法,并说明了不同编译器生成的对象文件无法直接链接的原因。同时强调了头文件应包含结构声明而非函数定义,以及源代码文件中系统头文件与自定义头文件的包含方式差异(尖括号与双引号)。最后指出不同编译器产生的二进制模块因名称修饰规则不同而不能兼容链接的问题。
2025-07-15 17:23:08
975
原创 【和春笋一起学C++】(二十四)C++函数新特性——显式具体化模板函数
摘要:本文介绍了C++中的显式具体化模板函数,通过student结构体示例说明当需要定制化交换特定成员时,显式具体化比普通模板更适用。文章展示了具体化模板的声明方式(template<> void Swap<student>),并比较了其与普通模板函数的优先级关系:非模板函数>显式具体化>常规模板。实例代码验证了显式具体化仅交换studentID而保留其他成员的特性,体现了C++模板特化的灵活应用。
2025-07-06 17:56:06
798
原创 【和春笋一起学C++】(二十三)C++函数新特性——函数模板与模板重载
函数模板是C++中的通用编程工具,允许使用参数化类型定义函数。通过template<typename Any>声明模板,编译器会根据调用时的具体类型自动生成对应版本的函数。例如Swap模板函数能处理int、double等多种类型的数据交换,无需重复编写相似代码。实例演示了模板如何为不同类型生成专用函数,最终程序仅包含实际调用的函数版本,既提高了代码复用性又保证了运行效率。
2025-06-29 10:07:38
501
原创 【和春笋一起学C++】(二十二)C++函数新特性——函数重载
函数重载允许在C++中定义多个同名函数,前提是它们的参数列表(特征标)不同。特征标包括参数类型、数目和顺序,而变量名和返回值类型不影响重载。使用时需确保参数类型匹配,避免因类型转换引起歧义。特殊情况包括:1)类型引用与原始类型被视为相同特征标;2)返回值类型不参与特征标判断。正确运用函数重载能实现功能相似但参数不同的函数调用,但需注意避免编译器无法分辨的情况。
2025-06-24 22:51:35
444
原创 【和春笋一起学C++】(二十一)C++函数新特性——默认参数
C++默认参数详解:函数调用时可省略参数,自动使用预设值。默认参数需在函数原型中从右向左设置,如char* left(const char* str, int n=1)。示例程序展示了如何利用默认参数获取字符串前n个字符,同时优化内存分配,避免浪费空间。关键点:默认参数简化代码,减少重载函数数量;字符串处理需注意结尾空字符;合理计算内存需求可提高效率。文章还纠正了默认参数设置的常见错误,并提供了改进的内存优化方案。
2025-06-22 16:42:11
436
原创 【和春笋一起学C++】(二十)关于引用作为函数参数的总结
C++函数参数传递方式的选择取决于数据对象类型和修改需求:对于内置类型和小型结构建议按值传递;数组必须用指针;大型结构和类对象推荐使用const引用以提高效率;需要修改数据时,内置类型用指针,结构用指针或引用,类对象用引用。文章还强调了独立思考和分析能力的重要性,建议通过量化方式理性处理情感问题。
2025-06-17 23:22:06
247
原创 【和春笋一起学C++】(十九)C++函数新特性——对象的引用作为函数参数
摘要:本文探讨了C++中将对象引用作为函数参数的使用方法。通过四个string拼接函数的对比实验,展示了不同参数和返回值类型的设计差异:version1使用const引用参数并返回对象值;version2返回非const引用导致输入被修改;version3因返回局部对象引用而崩溃;version4使用值传递效率较低但正确。重点分析了函数返回机制中临时存储区与直接引用的区别,解释了version3崩溃的原因,并说明了编译器对char*到string的隐式转换机制。实验结果验证了正确使用对象引用的重要性。
2025-06-14 13:24:24
788
原创 【和春笋一起学C++】(十八)C++函数新特性——引用变量用作函数参数
上面的程序中,当调用程序访问返回值时,返回值total的变量生命周期已经结束,该变量的内存空间已被释放,因此,调用程序访问了一个未知的地址,所以输出值才出现了一串乱的数字。这时当sum函数结束时,只要没有使用delete释放存储homework_time结构数据的内存空间,那么存放在内存空间的返回值就不会丢失,调用程序也就能访问到函数的返回值。需要注意的地方是,不能将函数中的自动变量作为函数的返回值,即当函数结束时,如果变量所占的内存单元被释放了,那该变量就不能作为返回值。求和结果是一串乱码,怎么回事呢?
2025-06-08 12:53:51
709
原创 【和春笋一起学C++】(十七)C++函数新特性——内联函数和引用变量
C++的函数特性相比C语言有显著改进,本文重点介绍了内联函数和引用变量两种特性。内联函数通过在编译时展开代码来提高运行效率,适用于频繁调用且代码简短的函数。引用变量则是变量的别名,与原始变量共享内存地址,主要用于函数参数传递。文章通过代码示例展示了二者的基本用法,并比较了引用与指针的区别。这些特性使C++在代码效率和编程便利性上优于C语言。
2025-06-04 22:11:01
797
原创 【和春笋一起学C++】(十六)结构作为函数参数
本文介绍了C++中结构作为函数参数的三种传递方式:直接传递结构、传递结构地址和传递结构引用。直接传递适合数据量小的结构,但会复制数据;传递地址通过指针访问数据,减少内存开销;传递引用语法简洁且安全,推荐使用。通过homework_time结构示例,展示了每种方式的代码实现和适用场景,其中传递引用方式既高效又避免了指针操作。建议根据结构大小和修改需求选择合适的方式,大数据量时优先考虑地址或引用传递以提高性能。
2025-05-26 21:37:09
294
原创 【和春笋一起学C++】(十五)字符串作为函数参数
开始,str指向字符串的第一个字符,因此*str表示的是第一个字符。最终str*将指向字符串结尾的空值字符,使得*str等于0(空值字符的数字编码为0),从而结束循环。需要注意的是,字符串与普通char数组的区别,字符串有内置的结束字符(空置字符,‘\0’),普通的char数组包含字符,但不是以空值字符结尾的,所以它不是字符串。例如:可以将一个结构赋给另一个结构,也可以将一个对象赋给另一个对象。可以将结构作为一个完整的实体传递给函数,也可以将一个对象作为完整的实体传给函数。
2025-05-23 18:58:00
479
原创 【和春笋一起学C++】(十四)指针与const
在C++中,const关键字用于指针时有两种主要情况:const int* pt和int* const pt。第一种情况,const int* pt,表示指针pt指向一个整型常量,不能通过pt修改该常量的值,但pt本身可以指向不同的地址。第二种情况,int* const pt,表示指针pt本身是常量,不能指向其他变量,但可以通过pt修改所指向变量的值。此外,将常量地址赋给非常量指针是非法的,因为这可能导致通过指针修改常量的值,违反了常量的定义。在实际编程中,使用const可以避免无意修改数据,并增加代码的灵
2025-05-17 18:52:37
531
原创 【和春笋一起学C++】(十三)将数组名用作函数参数的一个实例
总结:使用数组名作为函数参数时需要考虑在函数中是否需要修改数组元素的值,如果不需要修改数组元素的值,则需要将数组设置为const类型,以防止在函数中操作数组元素时无意中修改了数组元素的值。这里注意,show_array函数中的形参const double ar[]并不意味着实参数组必须是常量,它只代表不能在show_array()函数中修改ar数组元素的值。一个简单的实例,控制台终端输入一个数组后,显示数组中各个元素的值,然后乘以一个系数后再输出各个元素的值。
2025-05-11 18:06:07
421
原创 【和春笋一起学C++】函数——C++的编程模块
可能很多初学者会问,有了函数定义为什么需要函数原型?C++允许一个程序放在多个文件中单独编译,然后再将它们组合起来。在这种情况下,编译器在编译main()函数时,可能无法访问函数定义的代码。避免使用函数原型的唯一方法是在main()函数之前定义它。但C++的编程风格是将main()函数放在最前面,因为它通常提供了程序的整体风格。
2025-04-29 22:48:04
1057
原创 【和春笋一起学C++】文本文件I/O
在windows系统中读取键盘的输入和在屏幕上显示输出统称为:控制台输入/输出。把读取文本文件和把字符输出到文本文件中统称为:文本文件I/O。
2025-03-22 23:03:10
1009
1
原创 【和春笋一起学C++】switch语句
即程序跳转到switch中特定代码行后将依次执行之后的语句,不会在遇到下一个case处自动停止。要让程序执行完一组特定语句后停止,则必须用break语句。使用break语句后,程序才会跳出switch,开始执行switch之后的语句;switch不是为处理取值范围而设计的,switch语句中的每一个case标签都必须是一个单独的值。当所有选项都可以使用整型常量来标识且数目不小于3,那么使用switch是非常合适的,相比if else语句,它的运行效率更高,代码更简洁。
2025-03-09 09:28:04
340
原创 【和春笋一起学C++】逻辑操作符和条件操作符
另外,和关系操作符,算法操作符相比,逻辑非得优先级要高于关系操作符和算术操作符,而逻辑与(&&)和逻辑或(||)的优先级要低于关系操作符。当x等于0时,1/x是非法的,但因为此时x!=0已经为false,程序不会继续向右计算表达式(1/x >100)的值,所以这段代码在运行时不会报错。如果expression1为true,则整个表达式的值为expression2的值,否则整个表达式的值为expression3的值。当关系比较复杂时,为了便于理解和阅读代码,一般使用if else语句。的if else语句。
2025-03-03 22:37:19
330
原创 JETSON ORIN NX刷机趟坑记录
先烧录系统,系统烧录完成后再烧录SDK,同样在开始烧录前需要进行SDK烧录设置,如下图所示:图中报错了,是因为设备的IP没有修改,使用了默认的静态IP地址,这时你需要登录到你的设备上去查看下你板子的IP(因上一步系统已经烧录完成,此时你的设备可以正常开机了,你可以使用之前设置的用户名和密码正常登录进去),然后再填写到下图中的IP Address中。填写完IP后点击Flash,如果IP填写正确,则会进入到下图所示的界面,即检测你的电脑IP和设备的IP是否在同一个网段内,磁盘空间是否足够。
2025-02-19 17:48:36
1216
原创 【和春笋一起学C++】if else语句
if else语句格式如下:如果测试条件为true或非零,程序执行statement1,跳过statements,如果测试条件为false或0,则程序将跳过statement1,执行statement2。看上去像一个新的控制结构——if else if else,但实际上它只是一个if else被包含在另一个if else中。修订后的格式更为清晰,使程序员通过浏览代码便能确定不同的选择,整个构造仍被视为一条语句。
2025-02-18 21:25:00
460
原创 【和春笋一起学C++】文本输入与读取(二)
上篇文章《》学习了遇到某个字符时停止读取,那如果要读取键盘输入的所有字符该怎么做呢。答案是检测文件尾(EOF)。很多操作系统都支持通过键盘模拟文件尾条件,Unix通过Ctrl+D实现,windows系统通过Ctrl+Z实现。
2025-01-08 21:50:12
624
原创 【和春笋一起学C++】文本输入与读取
前面学习了while语句后,下面用while语句实现一个重要的功能,逐字符的读取键盘输入的字符序列,并输出到显示屏上。
2024-12-26 10:04:06
738
原创 【和春笋一起学C++】while语句和类型别名
执行完循环体后,程序返回测试条件,对它进行重新判断,如果该条件为非零,则再次执行循环体。分号可以放在while括号的后面,也可以另起一行只写一个分号,单独一行只有一个分号它也是一条语句,只不过是条空语句,什么都没做。在使用while语句时需要注意的一点是while圆括号后面不能加分号,加了分号编译不会报错,也能执行,但这个循环很可能是一个死循环,如果上面程序在while括号的后面加了分号,会出现什么情况呢?注意,末尾有分号,表明这是一条语句,可以理解为是一条声明语句,将BYTE声明为char的别名。
2024-12-20 16:07:25
897
原创 【和春笋一起学C++】字符串比较
在C语言中用于比较字符串的函数为strcmp函数,该函数定义在头文件中,是一个标准库函数。strcmp函数的工作原理是逐字符比较两个字符串,直到找到不同的字符或遇到空符'\0'为止。另外,如果str1和str2为字符数组,如果存储在字符数组中的字符串相同,不管str1和str2两个数组的大小是否相等,strcmp函数都将返回0。C语言中虽然不能用关系操作符来比较字符串,但可以用它来比较字符,因为字符实际上是整型,下面代码为输出所有的字母。函数接受两个字符串地址作为参数,即参数可以是。
2024-12-17 22:05:01
610
原创 【和春笋一起学C++】for语句和递增操作符
for语句包含控制体和循环体,循环体跟在控制体的后面。如下所示,控制体为for括号中的几个表达式,循环体为花括号中的几条语句。语句1;语句2;设置初始值;执行测试,看看循环是否应当继续进行;执行循环操作;更新用于测试的值;初始化,测试和更新操作这三个部分构成了for语句的控制部分,这些操作由括号括起来,其中每一部分都是一个表达式,且彼此由分号隔开。控制体后面的语句叫循环体,只要测试表达式为true,它便执行。控制体只执行一次循环变量的初始化;循环体中可以包含一条或多条语句;
2024-12-13 15:37:57
1007
原创 【和春笋一起学C++】OpenCV中数组和指针运用实例
opencv中遍历图像像素的方法有十几种,本文通过几种遍历图像像素的方式编写了一个简单的图像二值化函数,既巩固了指针和数组的知识,又掌握了遍历opencv中图像像素的方法。
2024-12-02 21:31:12
629
原创 【和春笋一起学C++】使用new创建动态数组
上面这种方式创建的数组在程序编译时将为它分配内存空间,不管程序最终是否使用数组,数组都在那里,它占用了内存空间。在编译时给数组分配内存被称为静态联编,意味着数组是在编译时加入到程序中的。但如果使用new创建数组,则不在编译阶段为数组分配内存空间,而是在运行阶段创建并分配内存空间。在运行阶段,如果用到了数组则创建,如果用不到数组则不创建,称为动态联编。数组在程序运行时创建,这种数组叫动态数组。......使用静态联编时,必须在编写程序时指定数组的长度,使用动态联编时,程序在运行时确定数组的长度。
2024-11-30 20:15:44
1606
原创 【和春笋一起学C++】C++中指针的原理
面向对象编程与传统的过程性编程的区别在于OOP强调的是在运行阶段(而不是编译阶段)进行决策。指针名表示的是地址,* 被称为间接值或解除引用操作符, 将其应用于指针,可以得到该地址处存储的值。上面语句表示manly是一个指针,manly表示的是一个地址,*manly表示存储在该地址处的值,*manly与常规int变量等效。int *ptr;这强调 *ptr是一个int类型的值。int* ptr;这强调,int*是一种类型,是指向int的指针。在哪里添加空格对编译器来说没有任何区别。
2024-11-28 20:26:24
409
原创 【和春笋一起学C++】(六)结构类型
其中,struct是关键字,inflatable是结构体的标签,name[20],volume,price三个变量是结构体成员,包含在花括号之间,结构体的声明以分号结束。结构声明分为内部声明和外部声明,内部声明只能被本函数使用,而外部声明则可以被其后面的任何函数使用,即可以用在文件的所有函数中。其初始化的方式和数组一样,使用由逗号分隔的值列表,并将这些值用花括号括起来。C++中的结构是用户定义的类型,结构的声明定义了这种类型的数据属性。访问类成员函数的方式是从访问结构成员变量的方式衍生而来的。
2024-11-27 23:02:20
465
1
原创 C++枚举类型
第二:将red, orange, yellow等作为符号常量,它们对应数值0-7,这些常量叫作枚举量。定义了枚举后,就可以用枚举名来声明这种类型的变量:如。因此,spectrum变量的值受到限制,spectrum变量被赋值时只能被赋予8个枚举量中的一个。C++的enum工具提供了一种创建符号常量的方式,这种方式可以代替const。枚举量是整型,可以被提升为int类型,但int类型不能自动转为枚举类型。对于枚举,只定义了赋值操作符,枚举类型没有算术运算。
2024-11-27 20:14:29
210
原创 C++的内存管理方式
而getneme函数体中的pn指针所指向的内存池则是动态存储方式,在getname函数结束时该内存池所占据的存储空间依然存在,内存池中依然有数据,在main函数中使用delete对该内存池的存储空间进行释放后,pn指向的内存池空间才算被释放。则即使包含指针的内存由于作用域规则和对象生命周期的原因而被释放,在自由存储空间上动态分配的变量或结构也将继续存在,且因为指向该自由存储空间的指针的内存被释放导致这部分的存储空间无法被访问,最终导致内存泄露。其中,自动存储和静态存储的主要区别在于变量的寿命。
2024-11-25 23:13:49
469
原创 C语言中的指针和字符串的赋值
将字符串复制到数组中,初始化数组时,请使用=操作符。否则请使用strcpy()。///以下形式也可以如果在使用strcpy()函数时,要存储的字符串长度超过了字符数组的长度,程序可能会产生未知的错误,这一点需要特别注意。应使用strcpy()或stmcpy()函数而不是使用赋值操作符来将字符串赋给数组。
2024-11-24 23:09:24
582
解决pjreddie版darknet在cudnn8.x环境下的编译问题
2022-05-18
VS2017环境下的tinyXML库
2022-05-09
opencv4.2,包括了扩展库opencv_contrib
2022-04-12
setuptools-36.2.4.zip
2020-02-27
GDAL111版本,包含proj.dll库,能实现坐标系统的转换功能
2018-05-04
opencv3.4.7build.zip
2020-01-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人