后端开发
C++ 标签描述

引言 还在手写晦涩难懂的Makefile文件吗?现如今,主流的c项目都采取CMake作为项目构建工具,CMake可以跨平台运行,而且语法相对Makefile而言直观很多,是时候将Makefile扫进垃圾堆了。 Hello,World! 首先先以单个源文件项目为讲解,新建一个main.cpp文件: include<iostream> usingnamespacestd; intmain(void){ cout<<"Hello,World!"<<endl; } 那么如何使用CMake编译这个文件呢?CMake所有的语句都写在一个名为CMakeLists.t...

  8Tw5Riv1mGFK   9天前   22   0   0 C++

目录 条款13:以对象管理资源(Useobjectstomanageresources) 关键想法 智能指针 条款14:在资源管理类中小心copying行为(Thinkcarefullyaboutcopyingbehaviorinresource-managingclasses) 条款15:在资源管理类中替工对原始资源的访问(Provideaccesstorawresourcesinresource-managingclasses) 显示转换或隐式转换 优缺点 条款16:成对使用new和delete时要采取相同形式(Usethesameformincorrespondingu...

  o0uwqWZeS4Wk   10天前   24   0   0 C++

在C中,lambda表达式提供了一种方便的方式来定义匿名函数。Lambda可以用来创建简单的函数对象,常用于算法库中的函数参数,特别是在STL(StandardTemplateLibrary)中。Lambda表达式的语法是这样的: [capture](parameters)->return-type{ function-body } 其中: capture:捕获列表,用于指定哪些变量从封闭的作用域中捕获以及如何捕获(值捕获、引用捕获、不捕获、隐式捕获)。例如,[x,&y]表示x通过值捕获,而y通过引用捕获。 parameters:参数列表,与普通函数的参数列表类似。如果没有参...

  BYaHC1OPAeY4   2天前   14   0   0 C++

C多态 多态(Polymorphism)是面向对象编程(OOP)的核心概念之一,它允许对象在相同操作下表现出不同的行为。在C中,多态通常通过继承和虚函数来实现。 理解多态 想象一个场景,你有一个动物园,里面有各种动物,如猫、狗、鸟等。每个动物都有自己的叫声。使用面向对象编程,我们可以创建一个基类Animal来表示所有动物,并为其定义一个makeSound()虚函数。然后,我们可以创建派生类,如Cat、Dog和Bird,并重写它们的makeSound()方法以实现各自的叫声。 classAnimal{ public: virtualvoidmakeSound()=0;//虚函数声明 }; cl...

  YHTQQsaAg9bB   11天前   21   0   0 C++

最近在翻《c函数式编程》的时候看到有一小节在说c14新增了“菱形运算符”。我寻思c里好像没什么运算符叫这名字啊,而且c14新增的功能很少,我也不记得有添加这种语法特性。一瞬间我有些怀疑我的记忆了,所以为了查漏补缺,我写了这篇文章。 什么是菱形运算符 这个概念在Java里比较多见: List<String>myList=newArrayList<>(); 这东西在Java里的学名是diamondoperator,表示使用泛型类并且类型参数在左侧的表达式已给出因此在右侧可以省略。 简单的说就是让你少写几次重复的类型参数。因为看起来像个菱形所以得名菱形运算符。 然后我们偶尔...

  yZdUbUDB8h5t   11天前   16   0   0 C++

一、定义   在class的声明里头,真正有用的两样东西是datamembers和memberfunctions:   Datamembers:表示根据这个class所产生的object里头会有些什么东西,它事实上也是占据object内存的唯一东西(除非引入虚拟机制)。通常为数据的封装性,我们把datamembers声明为private或protected。   Memberfunctions:是用来处理datamembers的函数。通常为了界面的开放性,我们把memberfunctions设计为pubilc。 二、DataMembers(数据成员)   Datamembers的声明和一般no...

  oBaV3jusLkh1   2天前   14   0   0 C++

class_template 类模板和函数模板的定义和使用类似,我们已经进行了介绍。有时,有两个或多个类,其功能是相同的,仅仅是数据类型不同。类模板用于实现类所需数据的类型参数化 template<classNameType,classAgeType> classPerson { public: Person(NameTypename,AgeTypeage) { this->mName=name; this->mAge=age; } voidshowPerson() { cout<<"name:"<<this->mNa...

  3dygdw7fVgD7   14天前   21   0   0 C++

C多级继承 多级继承是一种面向对象编程(OOP)特性,允许一个类从多个基类继承属性和方法。它使代码更易于组织和维护,并促进代码重用。 多级继承的语法 在C中,使用:符号来指定继承关系。多级继承的语法如下: classDerivedClass:publicBaseClass1,publicBaseClass2,...{ //...成员函数和属性 }; 在这个例子中,DerivedClass从BaseClass1和BaseClass2继承。这意味着它将继承这两个基类的所有属性和非私有成员函数。 多级继承的优点 代码重用:多级继承允许您从现有类中继承代码,减少重复开发并提高代码效率。 代码组织:...

  YHTQQsaAg9bB   14天前   25   0   0 C++

目录 条款05:了解C默默编写并调用哪些函数(KnowwhatfunctionsCsilentlywritesandcalls) 自动生成的函数 举例说明 条款06:若不想使用编译器自动生成的函数,就该明确拒绝(Explicitlydisallowtheuseofcompiler-generatedfunctionsyoudonotwant) 条款07:为多态基类声明virtual析构函数(Declaredestructorsvirtualinpolymorphicbaseclasses) virtual析构函数的作用 Virtual析构函数的缺点 Non-virtual析构...

  o0uwqWZeS4Wk   12天前   22   0   0 C++

目录 条款01:视C为一个语言联邦(ViewCasafederationoflanguages) 条款02:尽量以const、enum、inline替换define(Preferconsts,enums,andinlinestodefine) 替换原因 两种特殊常量 形似函数的宏 条款03:尽可能使用const(Useconstwheneverpossible) const和指针 const成员函数 在const和non-const成员函数中避免重复 条款04:确定对象被使用前已先被初始化(Makesurethatobjectsareinitializedbeforethey...

  o0uwqWZeS4Wk   12天前   17   0   0 C++

abstract抽象的 abstraction抽象性、抽象件 access访问 accesslevel访问级别 accessfunction访问函数 adapter适配器 address地址 address-ofoperator取地址操作符 aggregation聚合 algorithm算法 allocate分配 allocator分配器 application应用程序 architecture体系结构 argument实参 array数组 arrowoperator箭头操作符 assemblylanguage汇编语言 ...

  oBaV3jusLkh1   12天前   23   0   0 C++

Qt_1 QtCreator是Qt公司生产的IDE。它集成了多个工具,包括代码编辑器、图形UI(GUI)设计器、编译器、调试器、Qt设计器、Qt快速设计器和Qt助手等。 QtDesigner帮助设计基于小部件的GUI,而QtQuickDesigner提供了在设计模式下创建和编辑基于QML的GUI的UI。Qt助手是一个集成的文档查看器,只需按F1键即可打开与给定Qt类或函数相关的内容。 您可以在UI中看到以下GUI部分: IDE菜单栏:这为用户提供了一个在窗口中查找大多数特定于应用的功能的标准位置。这些功能包括创建项目、打开和关闭文件、开发工具、分析选项、帮助内容以及退出程序的方式。 模式...

  3dygdw7fVgD7   6天前   27   0   0 C++

C异常处理 C异常处理机制允许程序在运行时处理错误或意外情况。它提供了捕获和处理错误的一种结构化方式,使程序更加健壮和可靠。 异常处理的基本概念: 异常:程序在运行时发生的错误或意外情况。 抛出异常:使用throw关键字将异常传递给调用堆栈。 捕获异常:使用try-catch块捕获和处理异常。 异常类型:表示异常类别的标识符。 异常处理流程: 抛出异常:当检测到错误或意外情况时,使用throw关键字抛出异常。 解开堆栈:异常会沿着调用堆栈向上传播,直到找到匹配的catch块。 捕获异常:catch块捕获并处理抛出的异常。 异常处理:在catch块中,您可以执行代码来处理异常,例如记录错误...

  YHTQQsaAg9bB   12天前   23   0   0 C++

今天用VS2019编译一个在VS2008下Coding的工程的时候,VS给出了一堆链接错误信息,如下图所示的一些错误:   Error47errorLNK2019:unresolvedexternalsymbol"public:__thiscallstd::_Mutex::_Mutex(void)"(??1_Mutex@std@@QAE@XZ)referencedinfunction"public:void__thiscallstd::ios_base::clear(int,bool)"(?clear@ios_base@std@@QAEXH_N@Z)D:\server\mysqlpp...

  nmX9dIiR6BtA   12天前   20   0   0 C++

符号 目录 符号 注释 奇怪的注释 C风格的注释无法嵌套 一些特殊的注释 注释的规则建议 反斜杠'\' 反斜杠有续行的作用,但要注意续行后不能添加空格 回车也能起到换行的作用,那续行符的意义在哪? 反斜杠的转义功能 单引号和双引号 字面值,字符串,字符,字符变量的大小 为什么sizeof('1')的大小是4? char类型一直在发生截断. 不允许定义空字符常量 单引号内一般是一个字符,还可以有多个字符 短路 位运算 位运算和逻辑运算区别 位运算的几点注意 异或的运算规则 异或的经典问题:两数交换 位操作建议使用宏定义好后使用 位运算整型提升问题 左移和右移 概...

  C0Tz0A5KKSwy   5天前   23   0   0 C++

先说结论,lambda是不能重载的(至少到c23依旧如此,以后会怎么样没人知道)。而且即使代码完全一样的两个lambda也会有完全不同的类型。 但虽然不能直接实现lambda重载,我们有办法去模拟。 在介绍怎么模拟之前,我们先看看c里的functor是怎么重载的。 首先类的函数调用运算符是可以重载的,可以这样写: structFunctor{ booloperator()(inti)const { returni%20; } booloperator()(conststd::string&s)const { returns.size()%20; } }; 在此基础上,c11还引入了...

  yZdUbUDB8h5t   5天前   18   0   0 C++

  概述:拷贝并交换(Copy-and-Swap)是C编程中的惯用法,用于实现赋值操作符和确保异常安全的拷贝构造函数。其核心思想是通过拷贝构造函数创建临时副本,再通过交换确保操作的异常安全性。这种方法在C11之前和之后都适用,但在C11中,移动语义和右值引用的引入使得实现可以更加高效。 拷贝并交换(Copy-and-Swap)是一种C编程中的惯用法,通常用于实现赋值操作符和确保异常安全的拷贝构造函数。它的基本思想是使用拷贝构造函数创建临时副本,然后通过交换临时副本和当前对象的内容来确保异常安全。 include<iostream> include<algori...

  KxE3CZnPt4x3   7天前   18   0   0 C++

  概述:在C中,遍历由空格分隔的字符串的单词有多种方法,包括使用`std::istringstream`、手动遍历字符和正则表达式。其中,`std::istringstream`是简单高效的选择,通过流提取单词。手动遍历字符较为繁琐,正则表达式方法更灵活但可能有性能开销。根据实际需求选择方法,本文提供了清晰的实例源代码。 在C中,遍历由空格分隔的单词组成的字符串有多种方法,其中包括使用C标准库中的std::istringstream、手动遍历字符的方法以及使用正则表达式等。下面将分别介绍这些方法,并提供详细的实例源代码。 方法一:使用std::istringstream in...

  KxE3CZnPt4x3   7天前   12   0   0 C++

目录 条款17:让接口容易被正确使用,不易被误用(Makeinterfaceseasytousecorrectlyandhardtouseincorrectly) 限制类型和值 规定能做和不能做的事 提供行为一致的接口 条款19:设计class犹如设计type(Treatclassdesignastypedesign) 条款20:宁以pass-by-reference-to-const替换pass-by-value(Preferpass-by-reference-to-constopass-by-value) 避免构造和析构 避免对象切割 例外 条款21:必须返回对象时,别妄...

  o0uwqWZeS4Wk   8天前   14   0   0 C++

类模板应用 explicit explicit是一个关键字,用于指定该构造函数是显式构造函数。在C中,当一个类的构造函数只有一个参数时,它可以被用于隐式类型转换,这可能会导致意想不到的行为和潜在的错误。为了避免这种情况,可以使用explicit关键字来声明该构造函数,表示禁止隐式类型转换,只能显式地调用该构造函数来创建对象。 include<iostream> classMyClass{ public: explicitMyClass(intx){ std::cout<<"Explicitconstructorcalledwith"<<x<<s...

  3dygdw7fVgD7   8天前   18   0   0 C++