- 博客(70)
- 收藏
- 关注

原创 Everything 软件最全使用指南
Everything是windows系统上的文件搜索神器,如果能掌握它的使用方法,你绝对会爱上它,废话不多说,下面我给大家分享下,如何使用这个效率神器。
2023-08-13 10:06:49
27475
4
原创 保姆级VsCode配置C++编译环境
CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程),并且输出对应的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。这时候会自动生成一个.vscode文件夹,里面一般需要三个文件:tasks.json,launch.json,c_cpp_properties.json三个文件,没有的话自己新建对应名字的json文件,然后复制下面我的代码到对应文件中,并将下面三个文件的注释部分替换成自己的对应路径即可然后保存。
2024-10-23 08:30:23
4971
2
原创 C++的 try-catch 结构
在C++编程中,异常处理是确保程序健壮性的重要机制之一。当程序运行过程中遇到不可预期的错误或异常情况时,`try-catch`结构能够有效捕获并处理这些异常,从而防止程序直接崩溃。通过在`try`块中包裹可能抛出异常的代码,并在`catch`块中处理相应的异常,程序可以优雅地应对各种错误。本文将详细介绍C++中的`try-catch`结构及其应用场景。
2024-09-20 08:43:15
4439
原创 C++中的for-each循环
范围循环是C++中遍历容器、数组的一种简洁、直观的方式,能减少代码的复杂度,提高代码的可读性。通过对引用与常量的合理使用,可以更灵活地控制数据访问与修改。
2024-09-12 09:02:43
2777
原创 C++的字符串和字符串字面量
C风格字符串:使用字符数组或指针来表示,以'\0'结束,需要手动管理内存。:C++标准库的字符串类,提供了丰富的操作方法,自动管理内存,更加安全和高效。字符串字面量:代码中的直接字符串表示,存储在只读内存中。通过合理使用与C风格字符串,并理解字符串字面量的概念,能让C++程序在处理字符串时更加高效、易读和安全。
2024-09-10 08:30:00
2095
原创 C++的const
在C++编程中,`const`关键字是保证程序安全性和稳定性的重要工具。它可以用来定义不可修改的变量、限定指针行为,甚至控制类成员函数的权限。通过合理使用`const`,开发者可以避免不必要的数据修改,提升代码的可读性和维护性。本文将深入探讨`const`在C++中的各种应用场景,帮助你充分理解并掌握这一关键特性。
2024-09-09 08:30:00
1053
原创 C++的左值和右值
在C++编程中,理解左值(lvalue)和右值(rvalue)是掌握语言精髓的关键。左值表示的是在内存中有固定地址的对象,可以取地址操作,而右值则通常是一些临时对象,无法直接取地址。在实际开发中,左值和右值的区分不仅影响变量的赋值和操作,更直接关系到程序性能优化,比如移动语义和右值引用的应用。通过深入理解这一概念,你将更高效地编写C++代码,充分利用现代C++的特性。
2024-09-08 08:30:00
1072
原创 C++隐式转换
隐式类型转换在C++中扮演着重要角色,简化了代码书写,但也带来了潜在的风险。理解隐式类型转换的规则以及如何控制它们是C++开发者需要掌握的重要技能。基本类型转换:包括整型提升和算术转换。类类型转换:通过单参数构造函数和转换函数实现类类型的隐式转换。注意事项:使用explicit关键字防止不必要的隐式转换,并注意隐式转换的优先级问题。隐式类型转换在编写高效、简洁的C++代码中非常有用,但同时也需要开发者保持谨慎,避免由于隐式转换引发的潜在问题。
2024-09-07 08:54:54
617
原创 C++mutable
mutable是C++中的一个关键字,用于修饰类的成员变量。它的主要作用是允许在const成员函数中修改被mutable修饰的成员变量。这打破了const成员函数不能修改对象状态的一般规则。让我们通过几个例子来理解mutable的用法:在这个例子中,尽管是一个const成员函数,但它仍然可以修改成员,因为被声明为mutable。mutable通常用于以下场景:a) 缓存: 当某个计算很昂贵,我们想在const对象中缓存结果时。b) 互斥锁: 在多线程环境中,即使对象是const的,我们也可能需要锁定资源。
2024-09-06 08:30:00
2598
原创 C++的成员初始化列表
成员初始化列表是C++中类构造函数的一部分,它允许在构造函数体之前初始化类的成员变量。相比于在构造函数体内赋值,成员初始化列表有更高效的性能,特别是在初始化常量成员、引用成员和基类时至关重要。成员初始化列表的执行顺序并不是按列表中的书写顺序,而是按照成员变量在类中声明的顺序。常量成员变量一旦声明,必须被初始化,且在之后不能更改。对于自定义类型成员变量,使用成员初始化列表可以避免不必要的默认构造和赋值操作,提升代码性能。必须在初始化列表中初始化,因为它们只能在对象创建时被赋值,不能在构造函数体内赋值。
2024-09-05 08:30:00
2229
1
原创 C++的optional(C++17)
在C++17中,`std::optional` 提供了一种优雅的方式来表示可能存在也可能不存在的值。它避免了传统指针的空值检查,使代码更具表达性和安全性。在这篇博客中,我们将探讨 `std::optional` 的基本用法、优势以及它如何帮助我们编写更健壮的C++代码。
2024-09-04 08:30:00
1037
原创 C++三目运算符
C++中的三目运算符(Ternary Operator)是一种简洁的条件表达式语法,用于在一个表达式中实现简单的条件判断。它的语法和使用场景非常简单但非常有用,尤其是在需要简化代码或进行条件赋值时。以下是关于C++三目运算的详细教学,包括嵌套使用和代码示例的讲解。
2024-09-03 08:30:00
3115
原创 C++的结构化绑定(C++17 引入)
在C++17中,结构化绑定(Structured Bindings)是一项引人注目的新特性,它允许我们更简洁、直观地解构数据结构。通过这一特性,我们可以直接从元组、对组或结构体等数据类型中提取多个值,并赋给新的变量,从而使代码更加清晰易读。在本篇博客中,我们将深入探讨结构化绑定的基本概念、使用方法以及在实际编程中的应用场景。
2024-09-02 08:30:00
164
原创 C++创建并初始化对象
在创建对象之前,首先需要定义一个类。类是对象的蓝图,定义了对象的属性和行为。类通常包含成员变量(属性)和成员函数(方法)。在这个示例中,Person类包含两个成员变量name和age,以及一个成员函数display()用于显示对象的信息。对象的创建:可以在栈上或堆上创建对象,通过类的定义实例化对象。对象的初始化:主要通过构造函数完成,包括默认构造函数、带参数的构造函数和使用初始化列表。拷贝构造函数:用于创建对象的副本,在需要复制对象时调用。对象的销毁。
2024-09-01 08:30:00
3483
原创 C++的基准测试
基准测试是评估和优化代码性能的重要工具。通过测量代码的执行时间,开发者可以直观地看到不同实现方式的性能差异,并做出最优选择。无论是手动基准测试还是使用专业的基准测试工具,掌握这一技能都能帮助你编写更加高效的代码。这段代码通过实测不同智能指针的内存分配耗时,帮助开发者理解和选择合适的智能指针类型和创建方式,以优化 C++ 程序的性能和内存管理。
2024-08-31 08:17:27
792
原创 C++的重载
函数重载:允许在同一作用域内定义多个同名函数,通过不同的参数列表(类型、数量或顺序)进行区分。它提高了代码的灵活性和可读性。运算符重载:允许为运算符赋予新的意义,使其可以操作用户自定义的类型。这使得自定义类型的对象也可以像基本数据类型一样方便地使用运算符。重载是C++语言的重要特性之一,它赋予了开发者在编写代码时更大的灵活性和表达能力。理解和熟练使用重载对于编写高效、可维护的C++代码至关重要。
2024-08-30 08:30:00
581
原创 C++的复制与拷贝构造函数
在C++中,复制与拷贝构造函数是对象管理的重要机制,用于在创建新对象时复制已有对象的状态。拷贝构造函数通过深度或浅层复制实现对象的成员拷贝,从而影响对象的生命周期和资源管理。理解拷贝构造函数的工作原理与应用,对于编写高效且安全的C++代码至关重要,尤其在处理动态内存和复杂对象时。
2024-08-29 08:00:00
385
原创 C++创建沙箱程序
创建一个简单的沙箱程序(sandbox program)可以用于限制代码的执行范围、资源访问权限等。下面是一个简单的 C++ 沙箱程序示例,演示了如何创建一个限制执行权限的沙箱。这个程序的主要目的是防止执行任意系统命令,以此实现代码执行环境的隔离。这个简单的沙箱示例展示了如何在 C++ 中通过逻辑来限制代码的执行能力。实际的沙箱系统通常涉及操作系统级别的权限管理、虚拟化、资源限制等更复杂的技术。
2024-08-28 08:30:00
415
原创 C++的dynamic
在C++编程中,`dynamic_cast` 是处理多态类型转换的关键工具,允许在复杂继承结构中安全地将基类指针或引用转换为派生类指针或引用。通过利用运行时类型信息(RTTI),`dynamic_cast` 在转换失败时返回 `nullptr` 或抛出异常,从而确保类型安全。这使得它在处理多态对象和确保代码健壮性方面不可或缺。
2024-08-27 08:30:00
1099
原创 C++的模板
函数模板允许你编写一个函数,它可以适用于不同类型的参数。通过在函数名前加上template关键字并指定类型参数,函数的类型变得灵活。
2024-08-26 08:30:00
971
原创 C++的智能指针
在现代C++编程中,内存管理一直是一个至关重要且复杂的领域。手动管理内存不仅容易出错,还可能导致内存泄漏、悬空指针等问题。为了解决这些痛点,C++引入了智能指针(Smart Pointers),它们通过自动化的资源管理机制,使得内存管理变得更加安全和高效。在这篇博客中,我们将深入探索C++中几种常见的智能指针,揭示它们的强大功能和最佳实践,帮助你写出更健壮、更易维护的代码。
2024-08-25 08:30:00
1775
原创 C++的explicit
explicit用于防止构造函数的隐式调用和类型转换。它适用于单参数构造函数,帮助你控制对象的创建方式,避免潜在的错误。当你明确知道某个构造函数不应该被隐式调用时,使用explicit是一个好习惯。掌握explicit关键字能够让你编写更健壮和可控的代码,避免不必要的隐式转换带来的问题。这一行代码是用42作为参数来显式调用MyClass的构造函数,创建并初始化了一个名为obj的对象。explicit关键字保证了这种对象创建必须是显式的,避免了不必要的隐式转换。
2024-08-24 08:30:00
3277
原创 C++的this关键词
在C++编程中,`this` 关键字是指向当前对象的隐式指针。它在类的成员函数内部提供了对当前对象的直接访问,使得成员函数能够引用或修改对象的属性。`this` 关键字不仅有助于解决成员变量与函数参数之间的命名冲突,还在实现链式调用和运算符重载时发挥着重要作用。理解 `this` 的使用和特性,对于编写清晰、有效的面向对象代码至关重要。
2024-08-23 15:00:00
2107
原创 C++的类型转换
在C++编程中,类型转换(Type Conversion)是一个至关重要的概念,它允许开发者在不同数据类型之间进行转换,以确保程序的正确性和灵活性。无论是在处理简单的基本数据类型,还是在复杂的类对象之间进行转换,理解和正确运用类型转换不仅能提高代码的安全性,还能增强其可读性和可维护性。在这篇博客中,我们将深入探讨C++中的各种类型转换机制,帮助你掌握这一关键技术。
2024-08-23 08:30:00
1253
原创 C++中`union`
在C++编程中,union是一种独特的数据结构,它允许不同类型的变量共用同一块内存空间。这一特性使得union在某些特定场景下非常有用,尤其是在内存受限或需要节省内存的嵌入式系统中。union的每个成员共享相同的内存地址,这意味着在任何时刻,union只能存储一个成员的值。尽管这种限制使得union的使用变得稍显复杂,但它同时提供了一种灵活而强大的工具,用于处理多种数据类型。
2024-08-22 08:30:00
1909
原创 C++的虚析构函数
虚析构函数是指在基类中将析构函数声明为virtual的析构函数。这样,使用基类指针删除派生类对象时,可以确保调用派生类的析构函数,从而正确释放派生类对象占用的资源。虚析构函数在继承结构中起着关键作用。它确保派生类的析构函数被正确调用,从而避免内存泄漏或其他资源泄漏问题。虚析构函数的使用体现了C++中多态的完整性,是设计良好的面向对象代码的重要组成部分。
2024-08-21 08:30:00
556
原创 C++的类型双关
C++ 中的“类型双关”(Type punning)是一种编程技巧,指的是在程序中使用一种类型的数据通过另一种不兼容的类型来访问。这种操作有时可以绕过类型系统,直接操作内存,以提高性能或实现特定的低级别功能,但也容易引发未定义行为。
2024-08-20 08:18:48
1135
原创 C++的排序
在C++中,标准库提供了丰富的排序算法,如快速排序、归并排序和堆排序等,这些算法各有优劣,适用于不同的应用场景。在这篇博客中,我们将深入探讨C++中的几种常见排序算法,分析它们的实现原理、时间复杂度,并结合实际案例演示如何高效地对数据进行排序。在这个例子中,我们特别处理了数字 1,使其总是排在最后,而其他数字则按照正常的升序排列。这段代码展示了C++11及以后版本中的几个现代特性,包括初始化列表、lambda表达式和范围for循环,这些特性使得代码更加简洁和易读。好的,让我们分析这个新的。
2024-08-19 08:30:00
420
原创 C++的箭头操作符
箭头操作符(->)是C++中用于通过指针访问对象成员的重要工具。它简化了指针操作,使得通过指针访问对象成员变得直观和方便。了解箭头操作符的工作原理,包括它如何利用内存偏移来定位成员,对于深入理解C++的内存模型和指针操作非常有帮助。
2024-08-18 08:30:00
842
原创 C++数组入门
在C++编程中,数组作为一种基本的数据结构,扮演着不可或缺的角色。无论是处理简单的数据存储,还是实现复杂的算法,数组都提供了一种高效且直观的方式来管理和操作数据。对于每一个学习C++的程序员来说,理解数组的原理、使用方法以及它与内存管理的关系,都是迈向更高级编程技巧的重要一步。
2024-08-17 08:30:00
1245
原创 C++的动态数组以及std:vector的优化
在C++编程中,数组是一种常见的数据结构,用于存储固定大小的相同类型的数据。然而,在实际应用中,数据量往往难以预估,这时静态数组的固定大小限制就显得尤为不便。为了解决这一问题,C++引入了动态数组的概念。动态数组允许程序在运行时根据实际需求灵活地分配内存空间,从而有效地处理数据大小不确定的情况。
2024-08-16 08:30:00
973
原创 C++的多维数组
该代码有效地将二维数组“展平”到一维数组中,并对所有元素进行赋值操作。如果你有进一步的问题或需要更详细的解释,请告诉我!这种方法更适合那些在运行时需要灵活调整行列结构的场景,例如处理不规则矩阵或多行多列的动态数据。在需要高性能的场景中,通常会选择使用展平的方式来优化内存访问效率。两种方法各有优势,具体选择取决于应用场景和性能需求。
2024-08-15 08:30:00
1268
原创 C++的精确计时
在这篇博客中,我们将深入探讨如何使用 C++ 进行精确的代码计时,详细介绍不同的计时方法,并展示如何将这些方法应用到实际的代码中。无论你是想要评估一个函数的性能,还是统计整个程序的执行时间,本篇文章都将为你提供有价值的指导和参考。而在性能优化的过程中,准确测量代码片段或整个程序的运行时间是不可或缺的一环。如果你的项目中已经使用了 Boost 库,也可以使用其中的计时工具。你可以在程序的开始和结束处使用类似于上述的计时方式来统计整个程序的运行时间。返回的是 CPU 时间,而非真实的挂钟时间。
2024-08-14 08:30:00
1582
原创 C++的线程
C++中的线程支持是通过C++11引入的库来实现的。多线程编程可以提高程序的并发性,提升性能,特别是在多核处理器上。以下是关于C++线程的详细讲解,包括如何创建线程、线程的优点及作用等。
2024-08-13 08:41:43
786
原创 C++中的::
全局作用域解析:访问全局变量或函数。命名空间解析:访问命名空间中的成员。类成员解析:定义和访问类的成员变量、函数。类的嵌套类型解析:访问类中的嵌套类型。枚举类成员解析:访问枚举类中的成员。在C++中用途广泛,是一个重要的运算符,用于指定作用域、解析名称等。用于在类定义外部定义成员函数。
2024-08-12 08:30:00
953
原创 C++的using namespace
在大型项目或使用多个库时,不同代码库可能会定义相同名称的变量、函数或类,而没有合适的机制来区分这些名字会导致冲突。是C++中一个重要的特性,用于解决名字冲突、组织代码以及提升代码的可维护性,而C语言则通过命名约定和文件作用域来实现类似功能,但其灵活性和可读性不如C++中的。不使用using namespace std,是为了避免标准库函数和自己定义的函数无法区分,或者标准库函数和我定义的库函数一致而无法区分。
2024-08-11 08:30:00
1275
原创 C++的lambda
在现代C++编程中,Lambda表达式因其简洁性与灵活性而成为一种强大且广泛使用的工具。它们为开发者提供了一种优雅的方式来定义匿名函数,使代码更具可读性和可维护性。无论是在处理回调函数、与标准模板库(STL)的算法结合,还是简化并行计算中,Lambda表达式都展示了它的不可替代性。在这篇博客中,我们将深入探讨Lambda的语法、用法,以及它在实际开发中的应用场景,帮助你全面掌握这一现代C++的关键特性
2024-08-10 08:30:00
939
原创 C++的指针函数
指针函数是一个返回值为指针的函数。它的返回类型是一个指针,而不是普通的数据类型(如intfloat等)。换句话说,当你调用这个函数时,它会返回一个指向某种类型的内存地址。让我们来看一个实际的例子,通过这个例子你可以看到指针函数是如何工作的。// 返回指向数组第一个元素的指针} else {// 如果数组为空,返回空指针这里,是一个指针函数,它接受一个整数数组和数组大小作为参数,并返回一个指向数组第一个元素的指针。指针函数是一种返回指针类型的函数。
2024-08-09 08:30:00
2042
原创 C++的函数指针
在C/C++中,函数本质上是代码块的地址,而函数指针就是保存这个地址的变量。换句话说,函数指针是一个指向函数的指针。通过这个指针,你可以调用它所指向的函数。定义了一个名为的类型,它代表一个指向返回void且不接受任何参数的函数的指针。这个类型可以用来声明这样的函数指针,使代码更简洁和可读。
2024-08-08 08:30:00
972
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人