随笔分类 - C++
摘要:C++ 标准库提供了原子操作。(我已经懒得写序言了) 先来说原子操作的概念: 原子操作是多线程当中对资源进行保护的一种手段,主要作用是和互斥量(Mutex)一样,避免对资源的并发访问、修改。 互斥量的粒度衡量是作用域(哪怕作用域内只有一个变量),而原子的粒度衡量则是以一个变量或对象为单位。因此,原子
阅读全文
摘要:前排提醒: 由于 Microsoft Docs 全是机翻。所以本文表格是我人脑补翻+审校。 如果有纰漏、模糊及时反馈。 了解每一种容器的特性、知道什么情况下用什么容器就可以。 序列式容器 序列容器是指在逻辑上以线性排列方式存储给定类型元素的容器。 这些容器和数组非常类似,都是在逻辑上连续的(但内存不
阅读全文
摘要:1,变量的声明和定义有什么区别。 声明不分配内存,定义分配内存。变量只能被定义一次,但可以被声明多次。 // 定义 int i; // 声明 extern int i; // 定义(对资源进行了初始化) extern int i = 1; 2,#ifdef、#else、#endif和#ifndef的
阅读全文
摘要:阅读此文章前,务必读懂:【Example】C++ 标准库 std::thread 与 std::mutex 否则你会像听天书一样懵。(...) 在任何语言的多线程编程当中,必然涉及线程的同步及数据的共享,方式也有很多种。 C++ 标准库当中提供了同步及共享的方案:std::future 与 std:
阅读全文
摘要:与 Unix 下的 thread 不同的是,C++ 标准库当中的 std::thread 功能更加简单,可以支持跨平台特性。 因此在项目需要跨平台及对多线程简单应用情况下,应优先考虑使用 std::thread。 同时为了使多线程操作更加安全,std::thread 经常与标准库互斥量 std::m
阅读全文
摘要:回调函数是做为参数传递的一种函数,在早期C样式编程当中,回调函数必须依赖函数指针来实现。 而后的C++语言当中,又引入了 std::function 与 std::bind 来配合进行回调函数实现。 标准库中有大量函数应用到了回调函数,其中 std::sort 就是一个经典例子。 一,回调函数 回调
阅读全文
摘要:首先,阅读之前要先搞清楚什么是运算符、函数重载。函数重载就是在一个范围内为一个函数声明多个实现方式,函数名必须一致。 那么C++运算符是否可以重载呢?可以!先弄清什么时候需要进行运算符重载: 假设,你有一个类或者结构体,想通过 +、-、*、/ 这种最基本的运算符直接进行计算,又或者想用 ==、||
阅读全文
摘要:C++ 不同于 Java,它没有标准的 Object 类型。也就意味着 C++ 并不存在完整的泛型编程概念。 为什么不存在完整的泛型编程概念,放到最后一个例子讲,先讲 “部分的” 泛型编程概念的实现方式:模板。 什么是模板? 引用 Microsoft Docs: 模板是 c + + 中的泛型编程的基
阅读全文
摘要:C++ 是支持多继承的语言,但是实际项目开发中非必要不要使用多继承以降低代码逻辑的复杂性,当然 C++ 多继承的特性带来一些问题即菱形继承。 当一个类继承了两个来自同父类的子类后,会产生命名空间冲突及资源冗余。 【伪代码】 class Base{ public: int gem = 0; }; cl
阅读全文
摘要:QMAKE_LFLAGS += /MANIFESTUAC:"level='requireAdministrator'uiAccess='false'" 将以上那句话添加到 pro 文件即可。编译器 MSVC 适用。应该没有人拿 gcc 开发 Windows 桌面应用吧。。。
阅读全文
摘要:【概念直接搬运Docs】C 样式编程的一个主要 bug 类型是内存泄漏。 泄漏通常是由于为分配的内存的调用失败引起的 deletenew 。 现代 C++ 强调“资源获取即初始化”(RAII) 原则。 其理念很简单。 资源(堆内存、文件句柄、套接字等)应由对象“拥有”。 该对象在其构造函数中创建或接
阅读全文
摘要:C++ 和 Java 不同的是,C++ 没有 interface 关键字。对于很多新手来说,C++ 当中接口的概念不容易像 Java 当中那样被理解。 然而接口是面向对象编程当中的重要组成部分,也是新手需要学习的重要思维,虽然 C++ 并不那么面向对象。 首先,要明确接口的概念: 接口的存在意义是为
阅读全文
摘要:为什么要对 Vector 进行内存预分配? 1,Vector 本身是一个内存只会增长不会减小的容器。 2,Vector 存在 size 和 capacity 两种计数,size 即元素个数,capacity 则是容量即 vector 在内存当中的大小,理论上始终 capacity >= size。
阅读全文
摘要:为什么要对 Vector 进行内存强制回收? 1,Vector 的 clear() 函数仅仅是将 vector 的 size 设置为0,所存储的对象占用的内存并没有被回收。 2,Vector 本身是一个内存只会增长不会减小的容器。 3,最根本目的是减低内存占用、优化内存使用率避免浪费。 什么样的 V
阅读全文
摘要:编译教程:(太晚了,详细教程以后补) Qt6 教程: https://www.airchip.org.cn/index.php/2021/10/26/qtacsc6/ Qt5 教程: https://www.cnblogs.com/airchip/p/14016939.html 成品下载: 【Qt
阅读全文
摘要:什么是 Single Instance 单例模式? 单例模式是计算机程序设计当中一种常用思路,即软件系统运行当中,该类只允许拥有一个实例,且它必须在初始化的时候自己创建自己的实例。 那么单例模式主要是什么用途呢? 优化访问性能,便于进行数据共享。 比如说: 1,软件系统运行当中,业务上的配置文件参数
阅读全文
摘要:什么是 Private-IMPL ? 即【隐藏实现的方式】,如果你还停留在学习的阶段,那这种方式对你的代码几乎毫无用处。 但是如果你走入到真实项目当中,这种方式又显得尤为重要。 微软对 Private-IMPL 模式的简单概述(现代C++) 为什么: 1,它可以对外人尽可能隐藏你类内部实现,因为你的
阅读全文
摘要:定义一个函数,函数的作用是在堆内存创建一个对象,并将对象的地址赋值给外部的指针。 错误示例 bool CreateTable(QAxObject* doc, QAxObject* selection, int tableIndex, int rowNum, int colNum, QAxObject
阅读全文
摘要:class DataLoadDialog : public QDialog { Q_OBJECT public: DataLoadDialog(const vector<int> &fhBoxVec, QWidget *parent = nullptr); private: class pAttr;
阅读全文
摘要:git log --since="【开始时间】" --before="【结束时间】" --author="$(git config --get user.name)" --pretty=tformat: --numstat | gawk '{ add += $1 ; subs += $2 ; loc
阅读全文