C++的标识符的作用域与可见性C++的标识符的作用域与可见性
下面是关于C++的标识符的作用域与可见性学习记录,仅供参考
标识符的作用域与可见性
作用域是一个标识符在程序正文中有效的区域。
作用域分类
①函数原型作用域
②局部作用域(快作用域)
③类作用域
④文件作用域
⑤命名空...[2021/2/22]
C++对象的生存期笔记C++对象的生存期笔记
下面随笔记录了C++对象的生存期知识
静态生存期
这种生存期与程序的运行期相同。
在文件作用域中声明的对象具有这种生存期。
在函数内部声明静态生存期对象,要冠以关键字static 。
动态生存期
块作用域中声明的,没有用static修饰的对象是动态生存期的...[2021/2/22]
C++类的友元机制说明
下面给出C++类的友元机制说明(对类private、protected成员访问),需要注意的是,友元机制尽量不用或者少用,虽然它会提供某种程度的效率,但会带来数据安全性的问题。
类的友元
友元是C++提供的一种破坏数据封装和数据隐藏的机制。
通过将一个模块声明为另一个模块...[2021/2/22]
C++共享数据保护机制C++共享数据保护机制
下面随笔说明C++共享数据保护机制。
共享数据的保护
对于既需要共享、又需要防止改变的数据应该声明为常类型(用const进行修饰)。
对于不改变对象状态的成员函数应该声明为常函数。
(1)常类型
①常对象:必须进行初始化,不能被更新。
const 类名 对...[2021/2/22]
C++多文件结构和预编译命令
下面随笔将给出C++多文件结构和预编译命令细节。
多文件结构和编译预处理命令
c++程序的一般组织结构
一个工程可以划分多个源文件
类声明文件(.h文件)
类实现文件(.cpp文件)
类的使用文件(main()所在.cpp文件)
利用工程来组合各个文件...[2021/2/22]
编译器实现之旅——第一章 编译器概观编译器实现之旅——第一章 编译器概观
编译器,近在咫尺却又远在天边。当我们写下任何非机器语言代码后,我们都需要借助编译器将这些代码变为通过计算机可运行的状态。但是,就是这样一个使用率极高的程序,我们对其却知之甚少。什么是编译器?编译器对我们的代码做了什么?又是怎么做的呢?如果你也怀有这些疑问,想要深入编译器内部一探究竟的话,...[2021/2/19]
史上最贴心的 VS code C++ 环境配置超详细教程
前言
秦朝打败天下无敌手的室友法苏ovo前几天参加了CCSP,裸考的他遇见了Linux下的VsCode,然后搭C++环境搭了很久。
于是,他就学会了如何配置vscode的C++环境,然后,我也顺路学会了。真好。
一、VS code 前言
VS code作为一款当下非常受欢迎的一款IDE,...[2021/2/19]
彻底理解c++的隐式类型转换
隐式类型转换可以说是我们的老朋友了,在代码里我们或多或少都会依赖c++的隐式类型转换。
然而不幸的是隐式类型转换也是c++的一大坑点,稍不注意很容易写出各种奇妙的bug。
因此我想借着本文来梳理一遍c++的隐式类型转换,复习的同时也避免其他人踩到类似的坑。
本文索引
...[2021/2/19]
JPG学习笔记5(附完整代码)
JPG压缩的第4步是哈夫曼编码。下面主要介绍JPEG是如果进行哈夫曼编码的。
图片引用自"Compre ed Image File Formats JPEG, PNG, GIF, XBM, BMP - John Miano"[1]
1.AC数据的哈夫曼Symbol.
对于AC...[2021/2/18]
JPG学习笔记4(附完整代码)
#topics h2 { background: rgba(43, 102, 149, 1); border-radius: 6px; box-shadow: 0 0 1px rgba(95, 90, 75, 1), 1px 1px 6px 1px rgba(10, 10, 0, 0.5)...[2021/2/18]
c++ 智能指针基础详解
简介
在现代 C++ 编程中,标准库包含了智能指针(Smart pointers)。
智能指针用来确保程序不会出现内存和资源的泄漏,并且是"异常安全"(exception-safe)的。
智能指针的使用
智能指针定义在头文件 memory 里的命名空间 std 中。它对于资源获...[2021/2/18]
C/C++编程笔记:C ++中用于动态内存的new和delete运算符
C / C ++中的动态内存分配是指程序员手动执行内存分配。动态分配的内存在堆上分配,非静态和局部变量在堆栈上分配内存。
有什么应用?
动态分配内存的一种用途是分配可变大小的内存,而可变长度数组除外,这是编译器分配的内存无法实现的。
最重要的用途是为程序员提供了灵活性。无论何时...[2021/2/18]
关于显示加载动态链接库模块及卸载的问题
问题起因是,在一次模块卸载后,程序运行异常。遂对动态链接库做一些测试。
动态库加载方式有两种,隐式加载和显示加载,隐式加载包含xxx.lib导入库,在程序执行之前由动态加载器完成所有加载;显示加载则使用LoadLibrary方式;具体数据可参考《程序员的自我修养:链接,装载与库》一书。...[2021/2/18]
C++面向对象:C++ 接口(抽象类)
接口描述了类的行为和功能,而不需要完成类的特定实现。
C++ 接口是使用抽象类来实现的,抽象类与数据抽象互不混淆,数据抽象是一个把实现细节与相关的数据分离开的概念。
如果类中至少有一个函数被声明为纯虚函数,则这个类就是抽象类。纯虚函数是通过在声明中使用 "= 0" 来...[2021/2/18]
《C++ Primer》笔记 第11章 关联容器《C++ Primer》笔记 第11章 关联容器
关联容器类型
解释
按关键字有序保存元素
——
map
关联数组;保存关键字-值对
set
关键字即值,即只保存关键字的容器
multimap
关键字可重复出现的map
multiset
关键字可重复出现的set
无序集合
——
unordered_m...[2021/2/18]
Qt update刷新之源码分析(一)
在做GUI开发时,要让控件刷新,会调用update函数;那么在调用了update函数后,Qt究竟基于什么原理、执行了什么代码使得屏幕上有变化?本文就带大家来探究探究其内部源码。
Qt手册中关于QWidget::update()解释如下::
Updates the widget unl...[2021/2/18]
C++ string (浅谈)C++ string (浅谈)
浅谈string
<string>
typedef basic_string<char> string;
本篇主要内容是简单地介绍 string类 在竞赛方面较实用的一些功能,可能满足不了各大佬的需求
还是采用查字典的形式,右边目录速览吧
一、迭代器
s...[2021/2/18]
注意了!C++默认初始化与值初始化的这个细节,千万不要忽视!
在C++语言中,默认初始化和值初始化这两种变量初始化方式都可以调用类型的默认构造函数。它们的形式非常相似,大部分情况下作用相同,但它们之间存在容易忽视的微小差别。
值初始化的形式为:
T()
new T()
Cla ::Cla (...) : member() {...}
T ...[2021/2/18]
C/C++编程笔记:如何在C++中的类内创建动态2D数组?
假设我们要为Graph创建一个类。该类存储图的邻接矩阵表示。
因此,我们的类结构如下所示。
cla Graph {
int V;
int adj[V][V];
};
int...[2021/2/18]
《C++ Primer》笔记 第12章 动态内存
shared_ptr和unique_ptr都支持的操作
解释
shared_ptr sp或unique_ptr up
空智能指针,可以指向类型为T的对象
p
将p用作一个条件判断,若p指向一个对象,则为true
*p
解引用p,获得它指向的对象
p->mem...[2021/2/18]
在QT C++中调用 Python并将软件打包发布(裸机可运行)
为了提高工作效率,需要一个可以自动生成多份相关联的word文档免去繁琐复制粘贴工作的软件。最后选定使用QT C++做界面和主要逻辑程序设计,对word的操作使用python写好对应的函数,然后在QT中调用自己写好的python函数完成相应的功能。...[2021/2/18]
JPG学习笔记2(附完整代码)
#topics h2 { background: rgba(43, 102, 149, 1); border-radius: 6px; box-shadow: 0 0 1px rgba(95, 90, 75, 1), 1px 1px 6px 1px rgba(10, 10, 0, 0.5)...[2021/2/18]
【LeetCode Hot 100 最长回文子串】【LeetCode Hot 100 最长回文子串】
新年的刷的第一题,题目如下:
给你一个字符串 s,找到 s 中最长的回文子串。
示例 1:
输入:s = "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。 示例 2:
输入:s = "cbbd" 输出:"bb" 示例 3:
输入:s =...[2021/2/18]
【C++四种cast转换的学习】 const_cast,static_cast, dynamic_cast, reinterpret_cast
const_cast:用于将const变量转换为非const变量
int n = 5;
int *k1 = const_cast<int*>(&n); 指针
*k1 = 1;
int &k2 = const_cast<int&>(...[2021/2/18]
const成员函数可以将非const指针作为返回值吗?const成员函数可以将非const指针作为返回值吗?
先给出一段代码
cla A
{
int *x;
public:
int *f() const { return x; }
};
成员函数f返回指向私有成员 x 的非常量指针,我认为这会修改成员x ,对吧?
f 是 const成员函数,我应该在返回类型前面添加 ...[2021/2/18]
《C++ Primer》笔记 第13章 拷贝控制
拷贝和移动构造函数定义了当用同类型的另一个对象初始化本对象时做什么。拷贝和移动赋值运算符定义了将一个对象赋予同类型的另一个对象时做什么。析构函数定义了当此类型对象销毁时做什么。我们称这些操作为拷贝控制操作。
如果一个构造函数的第一个参数是自身类类型的引用,且任何额外参数都有默认...[2021/2/18]
这是一篇小短文
小鱼比可爱
描述
人比人,气死人;鱼比鱼,难死鱼。小鱼最近参加了一个“比可爱”比赛,比的是每只鱼的可爱程度。参赛的鱼被从左到右排成一排,头都朝向左边,然后每只鱼会得到一个整数数值,表示这只鱼的可爱程度,很显然整数越大,表示这只鱼越可爱,而且任意两只鱼的可爱程...[2021/2/18]
C++模板沉思录
0 论抽象——前言
故事要从一个看起来非常简单的功能开始:
请计算两个数的和。
如果你对Python很熟悉,你一定会觉得:“哇!这太简单了!”,然后写出以下代码:
def Plus(lhs, rhs):
return lhs + rhs
那么,C语言又如何呢?你需要...[2021/2/18]
STL_stack容器STL_stack容器
一、stack简介
stack是一种先进后出(First In Last Out,FILO)的数据结构,它只有一个出口。stack容器允许新增元素,移除元素,取得栈顶元素,但是除了最顶端外,没有任何其他方法可以存取stack的其他元素。换言之,stack不允许有遍历行为。
有元素推入栈...[2021/2/1]
STL_queue容器
一、queue简介
queue所有元素的进出都必须符合”先进先出”的条件,只有queue的顶端元素,才有机会被外界取用。queue不提供遍历功能,也不提供迭代器。
queue是简单地装饰deque容器而成为另外的一种容器。
#include <queue>
二、que...[2021/2/1]
STL_list容器
一、List简介
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。
链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。
...[2021/2/1]
C++概念性总结
1.面向对象的程序设计思想是什么?
答:把数据结构和对数据结构进行操作的方法封装形成一个个的对象。
2.什么是类?
答:把一些具有共性的对象归类后形成一个集合,也就是所谓的类。
3.对象都具有的两方面特征是什么?分别是什么含义?
答:对象都具有的特征是:静态特征和动态特征。
...[2021/2/1]
基于 OpenGrok 实现 Emacs 中代码符号查找跳转
背景
一直比较忙,太久没写点东西了,今天介绍下之前做的一个 Emacs 脚本。在公司里主要用 C++ 作为生产语言,平时用 Mac 电脑工作,但是代码开发都是在远端服务器上。公司代码异常庞大,思考不逊色 Linux 内核代码量,并且源代码级别依赖的项目更是几十个。作为 Spacemacs...[2021/2/1]
程序编译 - f-dev程序编译 - f-dev
目录程序的本质内存 & 寄存器程序语言的发展编程语言的本质区别
https: www.bilibili.com/video/BV1UV411B7qU?p=7 笔记
程序的本质
编译器 将 程序代码 转化成 CPU 指令/机器码;
指令装载到内存中;
CPU 读取/写入 ...[2021/2/1]
STL_map和multimap容器STL_map和multimap容器
一、map/multimap的简介
map是标准的关联式容器,一个map是一个键值对序列,即(key,value)对。它提供基于key的快速检索能力。
map中key值是唯一的。集合中的元素按一定的顺序排列。元素插入过程是按排序规则插入,所以不能指定插入位置。
map的具体实现采用红...[2021/2/1]
C/C++编程笔记:编写不会在C ++中编译的C程序,我教你呀!
尽管C ++被设计为与C具有向后兼容性,但是当使用C ++编译器进行编译时,可能会有许多C程序会产生编译器错误。以下是其中一些。
1)在C ++中,在声明函数之前调用函数是编译器错误。但是在C语言中,它可以编译
2)在C ++中,使普通指针指向...[2021/2/1]
STL_常用的算法
STL_常用的算法
一、常用的查找算法
adjacent_find()
adjacent_find(iterator beg, iterator end, _callback);
在iterator对标识元素范围内,查找一对相邻重复元素,找到则返回指向这对元素的第一个元素的迭代器。
...[2021/2/1]
C/C++编程笔记:C语言和C++中的未定义行为,及其优缺分析C/C++编程笔记:C语言和C++中的未定义行为,及其优缺分析
考虑以下C / C ++程序并尝试猜测输出什么?
举例一:
举例二:
举例三:
举例四:
举例五:
举例六:
举例七:
以上所有程序...[2021/2/1]
C/C++编程笔记:C++中的引用!(含引用和指针的对比)C/C++编程笔记:C++中的引用!(含引用和指针的对比)
当将变量声明为引用时,它将成为现有变量的替代名称。通过在声明中添加“&”,可以将变量声明为引用。
C++:
输出: x = 20 ref= 30
应用范围:
修改函数中传递的参数:如果函数收到对变量的引用,则可以修改变量的值。例如,以下程序...[2021/2/1]
[opencv]吊诡的摄像头黑屏
#include <opencv2/core.hpp>
#include <opencv2/videoio.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>...[2021/2/1]
C/C++编程笔记:盘点Java和C++之间的相似之处!
两者都是非常成功且流行的编程语言。尽管两者之间有很多差异,但是有很多相似之处,具体如下:
1.C ++和Java都支持面向对象的编程:
OOP是一种模块化的方法,它允许将数据应用到规定的程序区域中,它还提供了可重用性功能来开发生产逻辑,这意味着更加重视数据。它支持...[2021/2/1]
《C++ Primer》笔记 第9章 顺序容器
顺序容器类型
类型
解释
vector
可变大小数组。支持快速随机访问。在尾部之外的位置插入或删除元素可能很慢
deque
双端队列。支持快速随机访问。在头尾位置插入、删除速度很快
list
双向链表。只支持双向顺序访问。在list中任何位置进行插入、删除操作速度...[2021/2/1]
C/C++编程笔记:C++中的I / O重定向
在C语言中,我们可以使用函数freopen()将现有的FILE指针重定向到另一个流。
freopen()的原型为
FILE * freopen(const char *文件名,const char *模式,FILE * stream);
例如,将标准输出重定向为一个文本文件,我...[2021/2/1]
《C++ Primer》笔记 第10章 泛型算法
迭代器令算法不依赖于容器,但算法依赖于元素类型的操作。
算法永远不会执行容器的操作。算法永远不会改变底层容器的大小。
accumulate定义在头文件numeric中,接受三个参数,前两个指出需要求和的元素的范围,第三个参数是和的初值。accumulate的第三个参数的类...[2021/2/1]
配置CLion管理Qt项目国际化支持
随着Qt 6的发布,cmake也正式宣告接管qmake的工作了。
在之前的一篇博客里我介绍了如何使用cmake管理你的qt项目,不过有一点我没有讲,那就是对国际化(i18n)的处理。
今天我们就来介绍下如何使用cmake+clion配置管理一个包含了国际化支持的项目。
准备工作
你...[2021/2/1]
std::thread线程库详解(3)
目录
目录
前言
lock_guard
scoped_lock (C++17)
unique_lock
shared_lock
总结
ref
前言
前两篇的博文分别介绍了标准库里面的线程和锁,这一次的博文将会介绍锁的管理。
锁在多线程编程中非常常用,但是一旦使用不谨慎就会导致很多...[2021/1/25]
《C++ Primer》笔记 第6章 函数
任意两个形参都不能同名,而且函数最外层作用域中的局部变量也不能使用与函数形参一样的名字(形参就相当于该函数的局部变量)。
形参名是可选的,但是由于我们无法使用未命名的形参,所以形参一般都应该有个名字。某类形参通常不命名以表示在函数体内不会使用它。不管怎样,是否设置未命名的形参并不影响调用...[2021/1/25]
C++ STL 优先队列 (priority_queue)
std::priority_queue
<queue>
优先队列
1、第一个元素始终为最大元素。
2、有着类似于堆的特性,它可以在其中随时插入元素。
3、支持下标访问(随机访问迭代器)
优先队列内部的实现需要依赖基础容器,该容器应可通过随机访问迭代器访问,并需要支持...[2021/1/25]
【C/C++学习路线】(下):学完了C/C++语法之后该学什么?【C/C++学习路线】(下):学完了C/C++语法之后该学什么?
在学完了C/C++语法之后,我相信很多朋友都会比较迷茫,到底应该学什么?
其实总结起来无非就是:
1、网络编程;
2、操作系统;
3、数据库;
4、数据结构与基础算法;
上一篇文章中我们讲到了网络编程以及操作系统,那么今天,我们接着给大家分享数据库和数据结构部分!
数据库与...[2021/1/25]
【程序员进阶】如何才能减少 C++ 代码编译时间的方法!
C++ 的代码包含头文件和实现文件两部分, 头文件一般是提供给别人使用的, 但是一旦头文件发生改变,不管多小的变化,所有引用他的文件就必须重新编译,编译就要花时间。
假如你做的工程比较大(比如二次封装chrome这类的开发),重新编译一次的时间就会浪费上班...[2021/1/25]