自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

wanghao312的博客

嵌入式开发

  • 博客(197)
  • 收藏
  • 关注

原创 在类声明中定义函数等同于内联函数

您提到的“根据改写规则(rewriterule)”,指的是C++编译器在处理类声明中定义的方法时的一种行为。具体来说,当一个方法在类定义内部被完整定义时,编译器会将其视为一个内联函数的定义。然后,在类定义之后,编译器会把这个定义“改写”为外部定义的内联函数。总结来说,当一个方法在类声明中定义时,它会被编译器视为内联函数,并且编译器会把这个定义“改写”为外部定义的内联函数,这样在其他地方调用这个方法时,编译器会直接将函数体插入到调用点,而不是生成一个函数调用的指令。视为内联函数,因为它的定义在类声明内部。

2024-05-16 15:55:15 488

原创 C语言和C++中,结构体有什么不同点?

C语言和C++中,结构体(struct)有一些关键的不同点,主要体现在对结构体的访问控制、成员的默认访问权限、继承和成员函数等方面。

2024-05-16 15:36:34 674

原创 类默认是私有成员,结构体默认是公有成员,联合体和枚举没有这个概念,可以视为公有

的成员默认都是公有的,而。的枚举值是全局可见的。

2024-05-16 15:25:47 354

原创 命名空间namespace的用法

命名空间通过关键字namespace后跟命名空间的名字来定义。在命名空间内部,可以定义变量、函数、类等。

2024-05-16 11:28:50 723

原创 解释C++中的存储说明符是什么意思

在C++中,存储说明符(storage specifiers)是用于声明变量、函数或其他符号时,指定其存储属性的关键字。存储说明符影响变量的存储期限、链接性以及可见性。

2024-05-16 11:05:55 568

原创 静态局部变量和静态全局变量

静态局部变量(static local variable)是在函数内部声明的,具有静态存储期限的变量。这意味着它的生命周期从程序开始时开始,直到程序结束,而不是在函数调用时创建和销毁。静态局部变量只会被初始化一次,即使在函数被多次调用时也是如此。的值都会增加,并且记住上一次调用的值,因为它在函数调用之间保持不变。这些是C++中主要的静态变量类型,它们在程序中的作用和用途各不相同。初始化为0,然后增加到1,并打印出来。后续的调用会继续增加。都会被重新初始化为0,因此每次都会打印1。不是静态的,那么每次调用。

2024-05-16 10:52:59 163

原创 函数重载解析的匹配规则

简而言之,重载解析将寻找域匹配的函数。如果只存在一个这样的函数,则选择它:如果存在多个这样的函数,但其中只有一个是非模板函数,则选择该函数:如果存在多个适合的函数,且它们都为模板函数 ,但其中有一个函数比其他函数更具体,则选择该函数。如果有多个同样合适的非模板函数或模板函数,但没有一个函数比其他函数更具体, 则函数调用将是不确定的,因此是错误的;当然,如果不存在匹配的函数,则也是错误。在C++中,函数重载解析是一个复杂的过程,它涉及到完全匹配、最佳匹配、模板的部分排序匹配和用户提示选择函数。下面详细讲述这

2024-05-15 14:39:19 290

原创 模板的实例化和具体化

在C++中,模板的实例化(instantiation)和具体化(specialization)是两个相关但不同的概念。

2024-05-15 14:04:40 542

原创 函数模板自动完成重载函数的过程。只需使用泛型和具体算法来定义函数,编译器将为程序中使用的 特定参数类型生成正确的函数定义。

当编译器遇到一个函数模板的调用时,它会根据调用时提供的实际参数类型来推断模板参数的具体类型,然后生成一个具体的函数定义,这个过程称为模板实例化(Template Instantiation)。在编写程序时,我们经常会遇到对不同的数据类型执行相同或相似操作的情况,例如,比较两个数的大小,不管这两个数是整数、浮点数还是其他数值类型,比较的过程都是类似的。在函数模板中,我们使用一个或多个类型参数来表示这个函数可以接受的数据类型,这些类型参数在函数定义时是不具体的,只有在函数调用时才会被替换为具体的类型。

2024-05-15 12:52:41 316

原创 什么是常成员函数

这种函数承诺不会修改调用它的对象的状态。换句话说,一个常成员函数可以读取对象的数据成员,但不能修改它们。,那么它只能调用常成员函数,不能调用其他成员函数,因为非常成员函数可能会修改对象的状态,这是不允许的。常成员函数也可以重载非常成员函数,这为对象的操作提供了更多的灵活性。如果对象是非常对象,那么可以根据上下文选择调用非常版本或常版本。常成员函数的一个主要用途是允许常对象调用它们。关键字时,你就告诉编译器这个函数是常成员函数。的值,所以它不是常成员函数。是一个常成员函数,它返回。的对象是常对象,它会调用。

2024-05-15 12:31:10 451

原创 列举C++特有而C语言没有的特性

C++ 在 C 语言的基础上增加了很多面向对象编程的特性,以及其他一些改进。

2024-05-14 15:32:55 759

原创 介绍c++中new 和delete关键字的内容与用法

在C++中,new和delete是两个关键字,分别用于动态内存分配和释放。

2024-05-14 15:04:27 279

原创 在C++中,`using`指令有几种不同的用途

【代码】在C++中,`using`指令有几种不同的用途。

2024-05-14 13:49:42 319

原创 C++语言和标准库的关系--相辅相成

库不是C++语言内置的直接组成部分,但它是C++标准的一部分,因此在任何符合标准的C++编译器中都可以使用。这些类的设计和实现是为了提供一个统一的、类型安全的、可扩展的输入输出框架,使得在C++程序中进行输入输出操作变得容易和一致。库)提供了一系列的类和函数,这些类和函数不是语言内置的,但是它们是C++标准的一部分,并且在每个C++实现中都可以使用。这些类并不是C++语言内置的直接组成部分,而是作为标准库的一部分提供的,这意味着它们是由C++标准委员会定义并在每个C++实现中提供的。

2024-05-14 13:01:17 193

原创 梯度下降算法、链式法则、反向传播算法和激活函数

深度学习是一种机器学习技术,它通过构建多层的神经网络模型来学习数据的复杂模式。在深度学习中,梯度下降算法、链式法则、反向传播算法和激活函数是四个核心概念,它们相互关联,共同工作以训练神经网络模型。

2024-05-02 18:10:37 1334

原创 CUDA如何知道哪个GPU对应哪个编号?

请注意,如果你的系统中有多个GPU,它们可能会因为硬件配置、驱动程序或其他因素而有所不同。在多GPU系统中,确保正确地选择和配置GPU是非常重要的,以便有效地利用计算资源。这些方法可以帮助你了解系统中的GPU情况,包括它们的编号、名称以及是否可用。通常,编号为0的GPU是默认的CUDA设备,但你可以根据需要更改这个设置。模块来获取系统中的GPU信息,并查看每个GPU的编号。要确定哪个GPU对应哪个编号,你可以使用PyTorch的。

2024-05-02 16:57:31 969

原创 带参数的构造函数举例,使用初始化列表和不使用初始化列表

例如,如果你有一个类类型的成员,并且该类有一个带参数的构造函数,那么使用初始化列表会直接调用该构造函数来初始化成员,而不使用初始化列表则会导致先调用默认构造函数,然后再调用赋值运算符,这可能会导致不必要的性能开销。使用初始化列表通常是首选的做法,因为它更高效,直接初始化数据成员,而不是先默认初始化然后赋值。初始化列表在构造函数的参数列表后面,由一个冒号开始,后面跟着由逗号分隔的数据成员和它们的初始值。注意:在实际代码中,你不能有两个具有相同参数列表的构造函数,上面的代码是为了演示两种不同的构造方式。

2024-04-19 22:08:57 240

原创 左值和右值

此外,通过结合右值引用和模板,C++11引入了完美转发(Perfect Forwarding)的概念,它允许函数模板将参数不变地转发给其他函数,同时保留参数的左值或右值属性。左值引用和右值引用的引入,使得C++能够更好地支持泛型编程,例如,模板函数可以根据参数是左值还是右值来提供不同的实现,这在编写高效的库代码时非常有用。例如,变量、返回左值引用的函数调用、结构体的成员等都是左值。在C++中,左值和右值是表达式的分类,而左值引用和右值引用是C++11引入的新特性,用于更精细地控制对象的复制和移动。

2024-04-19 21:48:38 233

原创 只有把对象用值传递时,才会调用复制构造函数,如果传递引用,则不会调用复制构造函数。由于这一原因,传递比较大的对象时,传递引用会比传值的效率高很多

对于大型对象,避免复制可以显著提高性能,因为它减少了内存分配和复制的时间,并减少了内存使用。因此,在可能的情况下,应该尽量使用引用或指针传递对象,而不是按值传递。在C++中,当一个对象以值的方式传递给函数或者从一个函数返回时,复制构造函数会被调用。复制构造函数的参数通常是一个同类对象的引用,并且这个引用通常会被声明为。当您在C++中传递对象给函数时,根据传递方式的不同,编译器会决定是否调用复制构造函数。函数时,你会看到输出“复制构造函数被调用”,因为编译器创建了一个。本身并没有被复制,而是传递了一个引用。

2024-04-16 18:42:49 171

原创 构造函数重载

一个类中可以定义多个构造函数,这被称为构造函数重载(Constructor Overloading)。构造函数重载允许一个类有多个构造函数,每个构造函数都有不同的参数列表。这样,根据创建对象时提供的参数类型和数量,编译器可以选择正确构造函数来初始化对象。构造函数重载是面向对象编程中一个很常见的特性,它使得类可以更加灵活地适应不同的初始化需求。

2024-04-16 18:26:29 750

原创 构造函数知识

在C++中,构造函数是类的一个特殊成员函数,它在创建对象时自动调用,用于初始化对象的状态。

2024-04-16 18:23:44 684

原创 初始化列表

初始化列表是C++中一种用于在声明对象时同时赋予其初值的表达方式。在C++中,初始化列表出现在类定义的构造函数中,用于在对象创建时对其成员变量进行初始化。初始化列表的好处是可以提供类型安全的初始化,避免了潜在的默认构造和拷贝构造的问题。此外,使用初始化列表通常会使代码更加清晰和易于理解。需要注意的是,初始化列表优先于构造函数体内的初始化语句执行。如果构造函数中有初始化语句,它们将在初始化列表之后执行。在上面的例子中,即使初始化列表中。的值也会被构造函数体内的。的值,构造函数体内的。,并且使用初始化列表。

2024-04-16 16:59:19 386

原创 访问命名空间中的成员:当需要在命名空间外部访问命名空间内的成员时,可以使用作用域解析运算符。这个成员可以是函数吗?

命名空间中的成员可以是函数,而且使用作用域解析运算符来访问命名空间中的函数是C++中常见的做法。命名空间中,我们也能够调用命名空间内的。函数中,我们通过使用作用域解析运算符。

2024-04-15 18:06:11 141

原创 在类的成员函数中,既可以访问目的对象的私有成员,又可以访问当前类的其他对象的私有成员。

在C++中,类的成员函数有权访问当前类的所有对象的私有成员,因为它们是类的一部分。这是因为成员函数是在类的范围内定义的,它们对类的所有数据成员都有完全的访问权限,无论这些数据成员是私有的、保护的还是公有的。此外,成员函数也可以通过另一个对象的有权访问成员的指针来访问该对象的数据成员。这意味着,如果一个成员函数有一个同类的对象的引用或指针作为参数,它可以访问那个对象的所有成员,包括私有成员。这表明,类的成员函数确实可以访问同一类的不同对象的私有成员。成员函数访问当前对象的私有成员。成员函数则通过引用参数。

2024-04-15 18:02:00 378

原创 ::域解析运算符

是作用域解析运算符(scope resolution operator)。它用于指定一个特定作用域内的成员,比如类成员、枚举成员或者命名空间中的成员。作用域解析运算符是C++中一个非常重要的特性,它允许开发者在不同作用域之间明确地指定成员,从而避免名称冲突和提高代码的清晰度。

2024-04-15 17:48:38 586

原创 友元的知识

在C++中,友元(friend)是一个关键字,用于突破封装的边界,允许一个类的私有成员和保护成员被特定的函数或类访问。友元机制提供了一种方式,使得外部函数或类可以访问类的内部数据,而不必是类的成员函数。

2024-04-15 17:38:40 347

原创 公有成员、保护成员、私有成员知识

在C++中,类的成员可以根据其访问权限被分为三种类型:公有成员(public)、保护成员(protected)和私有成员(private)。这些访问权限控制符决定了类成员在类的内部和外部的可访问性。

2024-04-15 17:30:10 732

原创 【1.3】C语言的&符号和C++的&符号的相同点与不同点

在C语言和C++中,符号有两种主要的用途:取地址和引用。这两种语言在使用符号时有一些相同点和不同点。

2024-04-12 14:44:50 301

原创 【1.1】C++中引用的定义和本质与用法

声明引用在C++中,声明引用需要使用运算符。例如:int a = 10;int &b = a;这里,b是一个引用,它指向变量a,即b和a是同一个变量。初始化引用引用必须在声明时被初始化,并且只能初始化为一个已经存在的变量。初始化后,引用将始终指向该变量,直到引用被删除或重新初始化。引用的本质引用并不是一个新的数据类型,它只是一个变量的别名。这意味着引用的类型必须与它所引用的变量的类型相同。引用的大小和所引用的变量的大小相同,因为它们实际上是同一内存地址的不同名称。

2024-04-12 14:41:08 179

原创 【1.2】C++中引用&的用法-函数方面

定义引用参数在C++中,你可以在函数声明中使用符号来声明一个引用参数。例如:void swap(int &a, int &b);这表明swap函数接受两个整型引用作为参数。传递引用参数当你调用函数时,可以通过运算符传递变量的地址。例如:int x = 10, y = 20;swap(x, y);这会调用swap函数,并传递x和y变量的地址。函数内部修改引用参数在函数内部,你可以直接修改引用参数的值,因为引用实际上是变量的别名。例如,在swap。

2024-04-12 14:30:30 335

原创 在函数的用法方面,C语言没有而C++特有的一下特色

C++相比C语言,在函数用法方面引入了一些特有特性,这些特性使得C++的函数更加灵活和强大。

2024-04-12 14:24:51 312

原创 GB2312编码标准介绍

GB2312编码标准的推出,极大地促进了汉字在计算机领域的应用,为中文信息处理技术的发展奠定了基础。随着技术的发展,GB2312逐渐被更全面的编码标准如GBK、GB18030和Unicode等取代。GB2312是中华人民共和国国家标准汉字信息交换用编码,全称《信息交换用汉字编码字符集 基本集》,由国家标准总局发布,1981年5月1日实施。

2024-04-12 13:13:25 1364

原创 软件开发的五个部分

面向对象软件开发(Object-Oriented Software Development, OOSD)是一种编程范式,它将现实世界的问题域映射到软件系统中,通过对象和类的概念来组织数据和操作。

2024-04-12 12:43:22 534

原创 软件危机介绍

20世纪60年代,计算机技术得到了迅速发展,计算机的应用领域也在不断拓展。然而,当时的软件开发方法和技术还停留在较低的水平,无法满足大规模、高复杂度软件系统的开发需求。软件开发过程中的一系列问题逐渐凸显,导致了所谓的“软件危机”。总的来说,20世纪60年代的软件危机是计算机发展史上的一次重要事件,它揭示了软件开发过程中的诸多问题,并推动了软件工程学科的诞生和发展。通过这场危机,人们认识到了软件开发的复杂性和重要性,开始采用科学的方法和工程化的手段来开发软件,从而推动了软件产业的快速发展。

2024-04-12 12:36:55 636

原创 new关键字介绍

在C++中,new关键字用于动态分配内存,它允许程序在运行时请求内存。当使用new分配内存时,会调用构造函数来初始化该内存,使其成为相应类型的对象。成功分配后,new返回一个指向该分配内存的指针。

2024-04-11 18:10:38 514

原创 C和C++在动态内存分配上的主要区别在于内存分配的机制和方式

C和C++在动态内存分配上的主要区别在于内存分配的机制和方式。

2024-04-11 18:00:43 276

原创 C++中的内存分区

在程序编译后,生成了exe可执行程序,未执行该程序前分为两个区域。

2024-04-11 17:58:53 280

原创 链表的应用例子-学生成绩存储

函数中展示了如何使用这个类来创建一个链表,添加学生成绩信息,删除特定学号的学生成绩信息,并打印链表。单链表是计算机数据结构中的一个基本概念,它由一系列节点组成,每个节点包含数据部分和一个或多个指向其他节点的指针。我们可以定义一个节点结构来存储学生的学号和成绩,然后用链表来管理这些信息。函数中展示了如何使用这个类来创建一个链表,添加元素,删除特定值的节点,并打印链表。这个程序定义了一个单链表类,其中包括节点的创建、添加、删除和清除等功能。结构体来存储学生的学号、成绩和科目,然后创建了一个。

2024-04-11 17:05:39 223

原创 标准命名空间

可以使代码更简洁,但它也可能导致命名冲突和代码的不可预测性,因此一些程序员建议避免在大型项目或头文件中使用它。相反,他们倾向于显式地使用命名空间前缀,以保持代码的清晰和避免潜在的问题。这行代码的意思是告诉编译器使用标准命名空间(std)中的所有元素,而不需要在每个标准库对象或函数前加上。这样做是为了避免命名冲突,因为不同的库或用户定义的代码可能定义了相同名字的函数或类。C++的标准库中所有的标准函数、类和对象(比如。例如,如果你没有在代码中使用。,那么当你想要使用标准库中的。而如果你在代码的开头加入了。

2024-04-11 16:33:49 262

原创 老许,你要老婆不要?——C++中的对象

访问修饰符:C++提供了三种访问修饰符,用于控制对类成员的访问权限。public:公有的成员可以在类的内部和外部访问。private:私有的成员只能在类的内部访问。protected:受保护的成员可以在类的内部和派生类中访问。数据成员:这些是类中定义的变量,用于存储对象的状态。成员函数:这些是类中定义的函数,用于执行对象可以执行的操作。

2024-04-11 15:57:51 615

文件搜索工具,使用Python编写,然后压成一个.exe文件 该文件可以直接在Windows系统上运行

文件搜索工具,使用Python编写,然后压成一个.exe文件。该文件可以直接在Windows系统上运行。支持文件名称关键词搜索,即使文件名称输入不全也能搜索到。

2023-07-21

C++中引用(&)相关知识

C语言中的指针,和C++中的引用(&),在做函数形参的时候有很多相似的地方,为了方便查阅异同,截取了一部分关于引用的知识。

2023-07-17

用Python写的一个监控自己电脑各项参数的小程序

实时监控自己电脑的运行时间、使用率、内存使用率、CPU速度等参数,后期还可以扩展监控范围。

2023-07-15

python写的笔记本小程序

使用Chat gpt 通过发布命令写成的一个小程序。并且通过pyinstaller功能生成了.exe可执行文件。 后续会将源代码上传。

2023-07-14

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除