C++,基础知识学习
文章平均质量分 67
记载平时所看到的基础知识
JACKSONMHLN
这个作者很懒,什么都没留下…
展开
-
原子操作 CAS
原子操作 CAS翻译 2022-07-30 19:56:56 · 486 阅读 · 1 评论 -
Visual Studio 如何查看C++内存分布
msvc 分析内存工具 cl ./main.cpp -d1reportAllClassLayout原创 2022-07-22 19:02:08 · 2303 阅读 · 0 评论 -
常用关键字:#define,const,typedef,using,inline
常用关键字:#define,const,typedef,using,inline原创 2022-06-13 11:29:41 · 233 阅读 · 0 评论 -
C++ 堆/栈区别,new的用法,以及与malloc的区别
C++ 堆栈的区别、new/delete malloc/free 的区别与使用,等等原创 2022-05-31 22:40:48 · 1353 阅读 · 0 评论 -
构造函数与析构函数
构造函数与析构函数的执行顺序,初始化时候情况,以及缺省函数的生成。原创 2022-05-25 15:35:37 · 301 阅读 · 0 评论 -
函数对象与lambda表达式
lambda表达式学习记录原创 2022-05-23 23:08:51 · 268 阅读 · 0 评论 -
g++基本用法 objdump 查看输出obj文件
学习C和C++的同学应该都知道,gcc是一款跨平台的C/C++编译器,可以在Linux/Windows平台下使用,具有十分强大的功能,结构也十分灵活,并且可以通过不同的前端模块来支持各种语言,如Java、Fortran、Pascal、Modula-3和Ada的编译。许多有名的工程和库都是使用gcc进行编译的,如nginx,libevent等。今天我们重点介绍gcc组件中可以用来编译C++程序的g++组件的使用。g++可以在命令行使用,也可以通过配置IDE的编译环境来调用系统配置的g++环境,大家可以根据需要原创 2021-06-16 20:17:46 · 5585 阅读 · 0 评论 -
模板类的特例化(具体化)
模板的特例化(部分特例化和完全特例化)原创 2022-04-26 22:16:44 · 1390 阅读 · 2 评论 -
C++ 智能指针
裸指针占用内存小,十分强大。但是在动态内存的使用过程中,容易产生以下问题。忘记释放内存,造成内存泄漏 在尚有指针引用内存的情况下,就释放了它,产生引用非法内存的指针。为了更容易安全地使用动态内存,C++11提供了两种智能指针,来管理动态内存对象。shared_ptr 允许多个指针指向同一个对象;unique_ptr 则独占所指向的对象。还定义了一个名为weak_ptr 的伴随类,是一种弱引用,指向share_ptr 所管理的对象。 都定义在 memory 头文件中。...原创 2022-04-14 21:42:05 · 647 阅读 · 0 评论 -
C++ any类的设计
不知道作者是怎么想的,就按照any类有的作用来记录吧原创 2022-04-06 15:11:10 · 1506 阅读 · 1 评论 -
继承、虚继承、虚函数内存分布(MSVC下)
msvc 和 gcc 在虚继承内存上处理不太一样,还未研究完。原创 2022-03-31 17:02:01 · 2022 阅读 · 0 评论 -
嵌套模板,友元函数与模板类
1、友元函数与模板类常见类型模板函数中,实现友元函数,大概有下面几种分类。不需要模板参数的非模板函数 需要模板参数的非模板函数 需要模板参数的模板函数,使用类的模板参数来特化 需要模板参数的模板函数,使用自己的模板参数。(可以有多个模板参数)template<typename T>class A;template<typename T>void func3(const A<T>& obj);template<typename原创 2022-03-11 22:19:21 · 1228 阅读 · 0 评论 -
new、delete与malloc、free的区别,内在实现。
new、delete与malloc、free的区别;以及new与new[],delete,delete[]的区别。原创 2022-03-05 20:14:15 · 1485 阅读 · 0 评论 -
C++ 实现 String 类,所考虑的问题
1、string 对象中,因为需要在堆中开辟新的内存,所以用编译器默认的拷贝构造函数和复制构造函数,会造成问题,所以需要重写为深拷贝。2、在拷贝构造函数中,为什么可以访问一个对象的私有属性。 即为什么可以访问str.pstrMyString::MyString(const MyString& str) { int len = shtrlen(str.pstr) + 1; pstr = new char[len]; strcpy(pstr, str);}理由..原创 2022-03-03 09:34:16 · 235 阅读 · 0 评论 -
const和指针
const指针和指向常量的指针 - elephantcc - 博客园 (cnblogs.com)转载 2021-10-06 18:26:09 · 117 阅读 · 0 评论 -
C++ class 和 struct 构造函数
1)、Class在 C++ 中,有一种特殊的成员函数,它的名字和类名相同,没有返回值,不需要用户显式调用(用户也不能调用),而是在创建对象时自动执行。这种特殊的成员函数就是构造函数(Constructor)。和普通成员函数一样,构造函数是允许重载的。一个类可以有多个重载的构造函数,创建对象时根据传递的实参来判断调用哪一个构造函数。构造函数没有返回值,因为没有变量来接收返回值,即使有也毫无用处,这意味着:不管是声明还是定义,函数名前面都不能出现返回值类型,即使是 void 也不允许;函数体中不能.原创 2021-05-19 12:24:50 · 4229 阅读 · 0 评论 -
C++函数对象与函数指针
在使用STL库中,我们使用 sort 函数,在// sort algorithm example#include <iostream> // std::cout#include <algorithm> // std::sort#include <vector> // std::vectorbool myfunction (int i,int j) { return (i<j); }struct myclass { b原创 2021-04-13 19:21:57 · 293 阅读 · 0 评论 -
C++ 测量程序执行时间的办法
利用库 <ctime>(time.h) 去计算#include <ctime>//clock_t是定义<ctime>为基本算术类型的别名的类型。int main(){ clock_t start = clock();//自己的程序 clock_t end = clock(); clock_t time = end - start;//此处计算的是执行相关的时期以来经过的时钟滴答数。//如果要换算成秒的话,可以这样计算原创 2021-04-08 20:09:57 · 185 阅读 · 0 评论 -
C++,读/写文件。从一个读入,写入另一个文件
我们一直在用 cin 接收从键盘输入的数据,用 cout 向屏幕上输出数据(这 2 个过程又统称为“标准 I/O”)。除此之外,C++ 也对从文件中读取数据和向文件中写入数据做了支持(统称为“文件 I/O”)。...原创 2021-03-31 18:33:30 · 3825 阅读 · 0 评论 -
深入理解C++函数重载const
书上和网上在很多地方都对const 的重载做了一些解释,但感觉都不是很详细。还有很多同学在不同的地方发问关于const 重载的问题,这里我又重新看了一下,做了一个简单的分析也可能有不对的地方,欢迎讨论。所谓重载,是指允许存在多个同名函数,而这些函数的参数表不同,即函数名相同但函数的签名不同。重载并不是面向对象编程的特有属性,这是因为重载是在编译阶段实现的,编译器根据函数不同的参数表,对同名函数的名称做修饰,然后这些同名函数就成了不同的函数(这一点稍后有例子)。了Const 参数重载解析:...转载 2021-03-23 22:05:15 · 2271 阅读 · 0 评论 -
C++,自定义sort排序算法,map(key和value分别如何排序),set,priority_queue 自定义存储顺序
就目前所利用的知识中,有两处用到了自定义排序算法。 第一个是sort函数;第二个是部分排序容器的建立,例如map,set,priority_queue。在此记录一些通用的方法,至于其他更多原理,等有时间在记录。在C++ STL中,对于 vector,有 sort 函数,可以对 vector 中的元素进行排序。注意,下面的例子, sort(vec.begin(), vec.end(), cmp()),都加了括号,使用的是函数对象,更快。sort() 只对array、vector、deque 这 3 个.原创 2021-03-07 17:18:13 · 1913 阅读 · 0 评论 -
C++ length()、size()、sizeof()、strlen()四者的区别,以及capacity()
讨论字符串的这几个函数首先,length()、size()是STLstring中的公开成员函数;strlen 是头文件 <cstring> 中的函数;而sizeof(),并不是一个函数,而是一个运算符。函数原型:size_type size() const size_type length() const;// 这两个函数起着相同的作用,返回string所包含的内容多少。size_t strlen(const char* str);#include<strin.原创 2021-03-05 15:38:36 · 1890 阅读 · 0 评论 -
C++ 堆区,栈区,数据段,bss段,代码区(详解)
各段的介绍一般情况下,一个可执行C程序在内存中主要包含5个区域,分别是代码段(text),数据段(data),BSS段,堆段(heap)和栈段(stack)。其中前三个段(text,data,bss)是程序编译完成就存在的,此时程序并未载入内存进行执行。后两个段(heap,stack)是程序被加载到内存中时,才存在的。具体的样子可以如下图所示:未初始化的全局变量和静态变量,存储在bss区, 未初始化的局部变量保存在栈区。各段在加载到内存中所存储的内容代码段(text):就是C程序..原创 2021-03-05 14:23:50 · 9077 阅读 · 3 评论 -
C++指针和引用的区别
是否可变指针可以改变其绑定的变量,也可以不初始化(但不建议这么做);引用在定义时候,必须进行初始化,并且从一而终,不能改变。int x = 5;int y = 6;int *p; //可以不初始化,p = &x;p = &y; //可以改变指向。*p = 10;int x = 5;int y = 6;int &r = x; //引用必须得初始化,并且一直指向此块地址是否占内存指针变量有自己的实际地址和所占空间的大小,x86 上一般是 32 位,.原创 2021-03-04 20:22:13 · 937 阅读 · 2 评论 -
C/C++,转义字符,转义字符后加数字,以及八进制,十六进制的表示方法
转义字符的作用在C/C++ 中,有一些字符是没办法直接输入或者表示的,此时就需要转移字符了\原创 2021-03-04 17:10:11 · 7514 阅读 · 2 评论 -
C++学习记录———extern,static,声明与定义,全局变量与局部变量
局部变量和全局变量的区别局部变量定义在一个函数内部,在函数之外是不可访问的。(或者说定义在一个以{}为限的区域内)全局变量定义在所有函数之外,并且在其作用域内的所有函数都可以访问。下面做详细讲解。局部变量的生存期就是在定义它所在的{}里,全局变量是程序中定义在所有函数(包括 main 函数)之外的任何变量。全局变量的作用域是程序从变量定义到整个程序结束的部分。这意味着全局变量可以被所有定义在全局变量之后的函数访问。#include<iostream>using namespace .原创 2021-02-28 19:10:10 · 1989 阅读 · 0 评论 -
C++学习———数据结构
链表。#include <iostream>using namespace std;class myLinkedList{private: int _size; LinkedNode* _dummyHead;public: struct LinkedNode { int val; LinkedNode* next; LinkedNode(int val) : val(val), next(nullptr) {}转载 2021-02-21 09:39:33 · 244 阅读 · 0 评论 -
C++学习难点记录
1、指针和地址#include <iostream>using namespace std;int main(){ int a = 10; int* b = &a; return 0;}在内存中,变量a所代表的即是某块地址,里面存储的是变量。&取地址符号,可以对左值取地址,声明一个指针变量,可以存储所取到的地址值,当然也可以去知道指针的地址,但是很多时候没有必有。...原创 2021-02-01 19:40:52 · 328 阅读 · 0 评论 -
C++面试知识点总结
指针和引用的区别指针所指向的内存空间在程序运行过程中可以改变,而引用所绑定的对象一旦绑定就不能改变。(是否可变)指针本身在内存中占有内存空间,引用相当于变量的别名,在内存中不占内存空间(是否占内存)指针可以为空,但是引用必须绑定对象(是否可为空)指针可以有多级,但是引用只能一级(是否能为多级)堆和栈的区别申请方式:栈是系统自动分配,堆是程序员主动申请申请后系统响应:分配栈空间,如果剩余空间大于申请空间则分配成功,否则分配失败栈溢出;申请堆空间,堆在内存中呈现的方式类似于转载 2021-02-01 12:50:26 · 1069 阅读 · 0 评论 -
C++学习———VS 2019 制作和使用c++动态库步骤
由上一篇文章,https://blog.csdn.net/JACKSONMHLK/article/details/111936325遗留的下的问题,在此做一个解决方案,以后有了解决方案再进行添加。1、如何制作动态库和静态库。虽然vs提供了动态库和静态库的直接的环境,但是我不太会使用,因此使用了从空项目去创建动态库和静态库。@1、首先,创建一个空项目,然后右键项目名,@2、在属性上进行如下选择。@3、最后进行编译运行,会在你所创建文件的debug下,生成库。其中,不知道是我原创 2021-01-20 15:57:08 · 2534 阅读 · 0 评论 -
C/C++ 程序是如何执行的,.h文件 .c文件之间的执行关系
众所周知——我们在学习的时候,课本上是这样写的,一个程序的执行需要四步:::源文件 经过预处理阶段->编译阶段->汇编阶段->链接阶段->可执行下面以一个平凡的例子,来描述自己的疑惑和所学。#include <stdio.h>int main(){ printf("hello"); return 0;}1、预处理阶段。预处理器根据以字符 # 开头的命令,修改原始的C程序。例如,hello.c 的第一行 #include <st原创 2021-01-02 19:02:26 · 3477 阅读 · 0 评论 -
C++学习———lib,dll。如何使写好的代码,安全保密的供别人使用?后面有案例链接
项目进展遇到的问题:如何能够实现将写好的类代码封装起来,只提供头文件给其他人使用。具体来讲,有些资料这样讲,写一个类,要将类的实现与类的接口分开(也即是将类的声明和定义分开),类的接口放到头文件中,将类的实现放在cpp文件中,这样可以实现隐藏源码的作用,但是在自己做的过程中,想着,这个类你给别人用的话,不仅要提供头文件,源文件cpp一样要给用户,这样同样无法实现代码保密呀? 于是乎,在网上查阅众多资料,有这样一些方法,即将实现成dll或者lib,最后向别人提供即可。1、何为库?库是写好的,.原创 2020-12-29 20:45:13 · 989 阅读 · 0 评论 -
C++学习——— 指针记录 前置后置自增自减
1、首先明白指针,不能直接写,可以改写,可以读。#include<iostream>using namespace std;int main(){ int c;//没有进行初始化,没有分配内存 int* m = &c;//m指向c,是一块没有初始化的地址,随机。 cout << c << " " << *m << endl;//虽然可以编译成功,但是错误的。 int a = 10; int* p = &a;原创 2020-12-06 18:35:44 · 593 阅读 · 0 评论