C++基础学习

2023-05-16

文章目录

  • 编译内存相关
    • 编译
    • 变量与内存分区
      • 内存分区
      • 变量类型
    • 内存对齐
    • 内存泄露
    • 智能指针
    • include "" 和<>
  • 语言对比
    • c++ 11
      • 自动类型推导
      • lembda 表达式 (匿名函数)
      • 范围for
    • delete 函数和 default 函数
    • 对比C、python
  • 面向对象
    • 特性
    • 重载、重写、隐藏的区别
  • 关键字和库函数
  • 类相关
    • 拷贝构造函数
    • 虚函数 与 纯虚函数
    • 虚函数实现机制
    • 单继承多继承的虚函数表结构
  • 语言特性
    • 左值引用、右值引用、std::move()
    • 指针
    • nullptr 与 NULL
      • nullptr
      • NULL
    • 指针与引用
    • 强制类型转换
      • static_cast
      • dynamic_cast
      • const_cast
      • reinterpret_cast
    • 判断结构体相对
    • 参数值传递、引用传递、指针传递
    • 模板
      • 函数模板
      • 类模板
    • 可变参数模板
      • 特化
    • 泛型编程如何实现
  • 设计模式

参考:

  1. https://blog.csdn.net/luanfenlian0992/article/details/118771472#t13
  2. https://zhuanlan.zhihu.com/p/335994370
  3. https://zhuanlan.zhihu.com/p/79883965
  4. https://blog.csdn.net/K346K346/article/details/85018985
  5. https://blog.csdn.net/weixin_45626706/article/details/116497723?ops_request_misc=&request_id=&biz_id=102&utm_term=slam%20%E9%9D%A2%E8%AF%95c++%E9%97%AE%E9%A2%98&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-0-116497723.nonecase&spm=1018.2226.3001.4187#t39

编译内存相关

编译

编译.cpp .h过程分为四个过程:编译(编译预处理、编译、优化.s),汇编.o,链接。

静态链接
动态链接

变量与内存分区

内存分区

  1. 栈区:
    正常函数体内{}"定义的都是。
    连续内存。

  2. 堆区:
    new出来的。
    类似链表的分段内存。

  3. 全局/静态存区:
    static和全局变量extern.

  4. 常量区:
    常量。

  5. 代码区:
    编译后的二进制文件。

变量类型

  1. 全局变量:
    放在.cpp文件里面的,不再{}内的变量,同样的名称多文件共享。
    多个cpp文件共用或者{}内使用需要extern修饰声明。

  2. 静态全局变量:
    static修饰,具有文件作用域,多个文件同样的名称是不同的变量。

  3. 局部变量:
    {}里面定义的。

  4. 静态局部变量:
    static修饰的{}函数中的变量,具有函数作用域,只初始化一次。

内存对齐

对齐存取快,不报异常好迁移。
有些设备不支持非对齐的存取,不能保证原子操作。

内存泄露

new出来的内存,由指针进行操作,后来没delete指针指向别的了,之前的那块内存地址就找不到了,没法删除啥的。

智能指针

智能指针,自动释放内存,防止内存泄露。

  1. shared_ptr
    多个指针共享一块内存,通过引用计数自动释放。

  2. unique_ptr
    一个指针独占一块内存,不能拷贝赋值。可以移动构造和移动赋值构造。

  3. weak_ptr
    指向 shared_ptr 指向的对象,能够解决由shared_ptr带来的循环引用问题。

include “” 和<>

https://www.iteye.com/blog/kooyee-340846解释:
<>先去系统目录中找头文件,如果没有在到当前目录下找。所以像STL标准的头文件 stdio.h、stdlib.h等用这个方法。

""首先在当前目录下寻找,如果找不到,再到系统目录中寻找。 这个用于include自定义的头文件,让系统优先使用当前目录中定义的。

语言对比

c++ 11

自动类型推导

  1. auto
auto var = val1 + val2; //定义+初始化为左边的值
  1. decltype
decltype(val1 + val2) var1 = 0; //定义+初始化为其他值

lembda 表达式 (匿名函数)

[capture list/*捕获的局部变量列表*/] (parameter list/*形参*/) -> return type/*返回变量类型*/
{
	/*具体函数实现*/
   function body;
};

范围for

for (declaration /*列表中的一个元素*/: expression/*列表、数组*/){
    statement
}

这玩意不和python的for差不多吗,多了个declaration的变量类型常用auto

delete 函数和 default 函数

  1. delete 函数:= delete 表示该函数不能被调用。
  2. default 函数:= default 表示编译器生成默认的函数,例如:生成默认的构造函数。
#include <iostream>
using namespace std;

class A
{
public:
	A() = default; // 表示使用默认的构造函数
	~A() = default;	// 表示使用默认的析构函数
	A(const A &) = delete; // 表示类的对象禁止拷贝构造
	A &operator=(const A &) = delete; // 表示类的对象禁止拷贝赋值
};
int main()
{
	A ex1;
	A ex2 = ex1; // error: use of deleted function 'A::A(const A&)'
	A ex3;
	ex3 = ex1; // error: use of deleted function 'A& A::operator=(const A&)'
	return 0;
}

对比C、python

  • C++:面向对象
  • C:面向过程
    • 没有bool类型,用int代替
  • python:解释执行

面向对象

特性

  1. 封装:将对象的数据和过程绑定在一起则被称为封装。
  2. 继承
  3. 多态:子类重写父类的virtual虚函数实现。

重载、重写、隐藏的区别

  1. 重载:
    就是函数的重载,和面向对象没关系

  2. 隐藏:
    子类的同名函数会隐藏父类的同名函数,如果需要调用父类函数需要.Base::fun()

  3. 重写(覆盖):虚函数,纯虚函数(子类一定要重写)
    父类的函数有virtual修饰,函数名、参数列表、返回值类型需要一致。
    主要应用:父类指针指向new子类对象,实现父类指针调用子类的函数。

关键字和库函数

这玩意太多了还是直接看别人写的吧

  1. explicit:避免编译器进行隐式类型转换
  2. static
    1. 修饰类内的变量函数时候,可以不创建类对象直接使用,不能定义为virtual函数。只能访问static成员。因为静态成员函数没有 this 指针。
    2. 静态数据成员的类型可以是所属类的类型,而普通数据成员的类型只能是该类类型的指针或引用。
  3. const:修饰常量不能更改,只能初始化时候赋值。mutable修饰使得const的某些成员一直保持是可以改变的。
  4. #define:在编译预处理阶段进行文本替换
  5. typedef:定义类型的别名
  6. inline:内联函数。
  7. deletedelete[]
  8. new mallocdeletefree :malloc、free 是库函数,而new、delete 是关键字
    1. new:内存分配成功,返回该对象类型的指针;分配失败,抛出 bac_alloc 异常。申请空间时,无需指定分配空间的大小,编译器会根据类型自行计算;申请空间时,返回的类型是对象的指针类型,无需强制类型转换,是类型安全的操作符;
    2. malloc:成功申请到内存,返回指向该内存的指针;分配失败,返回 NULL 指针。在申请空间时,需要确定所申请空间的大小。申请空间时,返回的是 void* 类型,需要进行强制类型的转换,转换为对象类型的指针。
    3. 对于自定义的类型,new 首先调用 operator new() 函数申请空间(底层通过 malloc 实现),然后调用构造函数进行初始化,最后返回自定义类型的指针;delete 首先调用析构函数,然后调用 operator delete() 释放空间(底层通过 free 实现)。malloc、free 无法进行自定义类型的对象的构造和析构。
    4. new 操作符从自由存储区上为对象动态分配内存,而 malloc 函数从堆上动态分配内存。(自由存储区不等于堆)
  9. malloc 的原理?malloc 的底层实现?
  10. C 和 C++ struct 的区别?为什么有了 class 还保留 struct?
  11. union:联合体,只有一个有效的成员,对联合体的不同成员赋值,将会对覆盖其他成员的值,联合体的大小为其内部所有变量的最大值,按照最大类型的倍数进行分配大小。
  12. class 和 struct 的异同
    1. class(private 继承),struct(public 继承)
    2. class 可以用于定义模板参数,struct 不能用于定义模板参数。
  13. volatile:多线程巴拉巴拉的,类似线程锁。
  14. extern:C 语言编写的函数
  15. sizeof(1==1) 在 C 和 C++ 中分别是什么结果?
  16. memcpy 函数的底层原理?
  17. strcpy 函数有什么缺陷?

14.-17.啥的从来没用到过QAQ

类相关

拷贝构造函数

  • 值传递: 对于内置数据类型的传递,直接赋值拷贝给形参(形参表示为函数内的局部变量)。对于类类型的传递,首先要调用该类的拷贝构造函数来初始化形参
  • 引用传递: 无论是内置数据类型的传递还是类类型,传递引用或指针最终都是传递地址值,不会有拷贝构造函数的调用

需要是引用传递,因为值传递首先需要调用拷贝构造函数创建一个类的对象。禁止套娃。

虚函数 与 纯虚函数

  1. 虚函数必须实现,否则编译器会报错;
  2. 包含纯虚函数virtual fun()=0;的类为抽象类不能实例化对象。
  3. 子类继承抽象类,没有完全重写纯虚函数,也是抽象类。

虚函数实现机制

类的对象存储指向虚函数表的指针实现

  • 虚函数表
    1. 虚函数表存放的内容:类的虚函数的地址。
    2. 虚函数表建立的时间:编译阶段,即程序的编译过程中会将虚函数的地址放在虚函数表中。
    3. 虚表指针保存的位置:虚表指针存放在对象的内存空间中最前面的位置,这是为了保证正确取到虚函数的偏移量。

单继承多继承的虚函数表结构

语言特性

左值引用、右值引用、std::move()

右值引用可以修改右值,借助 std::move()转换左值引用为右值引用

  1. 右值引用
int &&a = 10;
a = 100;
int b = 5;
int &&refb=std::move(b);
  1. std::move()
    https://zhuanlan.zhihu.com/p/335994370总结的右值引用好处
    1. 从性能上讲,左右值引用没有区别,传参使用左右值引用都可以避免拷贝。
    2. 右值引用可以直接指向右值,也可以通过std::move指向左值;而左值引用只能指向左值(const左值引用也能指向右值)。
    3. 作为函数形参时,右值引用更灵活。虽然const左值引用也可以做到左右值都接受,但它无法修改,有一定局限性。

指针

大小:64位计算机占8个字节

  1. 普通指针
  2. 常量指针
    1. 常量指针,const int *myptr = aa可以是变量,只是限制不能使用常量指针修改变量a值。
    2. 指针常量,int const * myptr = amyptr本身不能改变即指向的地址不能改变,a的值可以进行修改。
  3. 函数指针
    1. 函数指针,int (*funptr)(int x, int y);funptr可以指向函数int fun(int x, int y){return x*y;}使用funptr = fun;
    2. 函数指针,函数的返回值为指针int * fun(){int * intptr = new int(10);return intptr;}
  4. 指向对象成员的指针
  5. this指针
  6. 野指针和空悬指针
    1. 野指针,未初始化,指向的地址随机
    2. 空悬指针,指向的内存空间已经释放

nullptr 与 NULL

nullptr 具有数据类型,可以转换为任意类型的指针。
NULL 是0,函数重载调用时,会出现无法匹配的情况。

nullptr

nullptr并非整型类别,甚至也不是指针类型,但是能转换成任意指针类型。nullptr的实际类型是std:nullptr_t。

NULL

总结别人的解释https://zhuanlan.zhihu.com/p/79883965
c语言中

#define NULL ((void*)0)

c++语言中

#define NULL 0

NULL是宏定义,在C++中,NULL不过是0,把它当成空指针只是一个无可奈何了。因为C++中不能将void *类型的指针隐式转换成其他指针类型。

指针与引用

  • 指针所指向的内存空间在程序运行过程中可以改变,而引用所绑定的对象一旦绑定就不能改变。(是否可变)
  • 指针本身在内存中占有内存空间,引用相当于变量的别名,在内存中不占内存空间。(是否占内存)
  • 指针可以为空,但是引用必须绑定对象。(是否可为空)
  • 指针可以有多级int **myptp,但是引用只能一级。(是否能为多级)

强制类型转换

static_cast

int a = 10;
doubel b = static_cast<double>(10);
  1. 可以:整型和浮点型、字符型之间的互相转换。空指针转化成目标类型的空指针。任何类型的表达式转化成 void 类型。
  2. 不能:在不同类型的指针之间互相转换,整型和指针,不同类型的引用之间。
  3. 父类和子类,子类转换为父类安全,父类转换为子类有风险。

dynamic_cast

通过“运行时类型检查”来保证安全性的。

  1. 可以:专门用于将多态基类的指针或引用强制转换为派生类的指针或引用,而且能够检查转换的安全性。对于不安全的指针转换,转换结果返回 NULL 指针。

const_cast

去除 const 属性的转换。

  1. 可以:将 const 引用转换为同类型的非 const 引用。将 const 指针转换为同类型的非 const 指针。
  2. 不能:用于去掉变量的常量性。

reinterpret_cast

reinterpret_cast 用于进行各种不同类型的指针之间、不同类型的引用之间以及指针和能容纳指针的整数类型之间的转换。转换时,执行的是逐个bit复制的操作。

就是随便程序员转换,挂了自己负责。

判断结构体相对

自定义比较函数,重载运算法==啥的。
memcmp是逐个字节比较,然而可能存在内存对齐,对齐时候的补的字节是随机的。

参数值传递、引用传递、指针传递

模板

参考https://blog.csdn.net/K346K346/article/details/85018985

  1. 函数模板、类模板区别:
    • 实例化方式不同:函数模板实例化由编译程序在处理函数调用时自动完成,类模板实例化需要在程序中显式指定。
    • 默认参数template<typename T1=int,typename T2>:类模板在模板参数列表中可以有默认参数。c++11之后类模板和函数都可以有。
    • 特化:函数模板只能全特化;而类模板可以全特化,也可以偏特化。
    • 调用方式不同:函数模板可以隐式调用,也可以显式调用;类模板只能显式调用。

函数模板

template<typename T>
T fun(T x, T y)
{
	return x+t;
}

int x,y;
fun(x,y);//隐式调用
fun<int>(x,y);//显式调用

类模板

template <typename T>
class AAA
{
public:
    //构造函数
    AAA(T a, T b)
    {
        this->a = a;
        this->b = b;
    }
    //运算符重载
    AAA<T> operator+(AAA &c)
    {
        AAA<T> tmp(this->a + c.a, this->b + c.b);
        cout << tmp.a << " " << tmp.b << endl;
        return tmp;
    }
private:
    T a;
    T b;
};

Complex<int> a(10, 20);//显式调用

可变参数模板

template <typename T, typename... Args> // Args 是模板参数包
void fun(T &t, Args&... rest); // 可变参数模板,rest 是函数参数包

template <typename T> 
void fun(T &t);

本质上是递归调用fun( T &t, Args&... rest),直达参数只剩一个调用fun(T &t)结束。

#include <iostream>
using namespace std;

template <typename T>
void print_fun(const T &t)
{
    cout << t << endl; // 最后一个元素
}

template <typename T, typename... Args>
void print_fun(const T &t, const Args &...args)
{
    cout << t << " ";
    print_fun(args...);
}

int main()
{
    print_fun("Hello", "wolrd", "!");
    return 0;
}
/*运行结果:
Hello wolrd !

*/

特化

类模板

template<class T1,class T2>
class Test
{}
//全特化
template<>
class Test<int,int>
{}

//偏特化
template<class T>
class Test<int,T>
{}

函数模板

//普通模板
template<class T1,class T2>
bool Compare(T1 a, T2 b)
{
 return a == b;
}

//函数模板特化
template<>
bool Compare(const char* a, const char* b)
{
 return strcmp(a,b) == 0;
}

泛型编程如何实现

模板
容器
迭代器

STL中了解一下底层实现

设计模式

ennn再说吧

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++基础学习 的相关文章

  • Robomaster视觉教程(零)各种常见问题汇总

    从一个RM新人到现如今带了一届新人之后 xff0c 将各种常见的问题总结下来 xff08 不定期补充更新 xff09 xff1a 1 Opencv不是已经更新到Opencv4了吗 xff0c 为什么我们还要用Opencv3呢 xff1f x
  • python练习54:取一个整数a从右端开始的4〜7位

    取一个整数a从右端开始的4 7位 a 61 1234567 a 61 str a if len a 61 61 7 print a len a 4 1 elif len a gt 7 print a len a 4 len a 8 1 el
  • Python第四日

    2020年2月11日 上午 一 字符串 xff1a xff08 1 xff09 字符串从0开始 xff08 2 xff09 字符串定义后不可更改 xff08 3 xff09 由数字和任意字符构成 for i in str for循环i直接可
  • mybatis-plus自定义sql分页

    1 在pom文件中引入mybatis plus span class token tag span class token tag span class token punctuation lt span dependency span s
  • 寒假训练赛第二场 -- 思维题

    题解 A 01 Game题意 xff1a 思路 AC代码 B String Task题意思路AC代码 C Sereja and Suffixes题意思路AC代码 D XXXXX题意思路AC代码 E Swap Adjacent Element
  • seg指令 <在内核源码bootsect.s中出现>

    bootsect S分析 一文中有这样一段代码 xff1a seg fs lds si bx ds si是源地址 将fs bx地址所指的指针值放入ds si中 看到这里有点晕 xff1a ds si是源地址 xff1f 不管了 xff0c
  • SQLite3源码下载与编译(开发环境:Win10+VS2022)

    目录 SQLite下载SQLite源码基本结构编译SQLite SQLite 下载SQLite源码 下载链接 点击 sqlite autoconf xxxx tar gz 然后下载即可 xff08 推荐采用迅雷下载比较快 xff09 基本结
  • 音视频开发--音视频基础

    音视频基础 一 音视频录制原理 视频录制流程 1 准备摄像头 2 图像帧阶段 从摄像头采集视频数据 xff08 图像帧 xff09 xff0c 采集数据格式 xff1a YUV或者RGB xff0c YUV和RGB细分的话还包括YUV 4
  • 【WSL】windows下的linux子系统——自定义安装以及配置图形界面

    WSL xff0c xff08 Windows Subsystem for Linux xff09 xff1a 官方说明 xff1a 适用于 Linux 的 Windows 子系统可让开发人员按原样运行 GNU Linux 环境 包括大多数
  • Wsl2-Ubuntu安装

    Wsl2 Ubuntu安装 1 在windows搜索控制面板 xff0c 并打开控制面板 2 选择程序 3 选择启动或关闭Windows功能选项 4 勾选下图框住的三个选项 xff0c 点击确定 5 选择立即重启 xff0c 等待重启 6
  • C语言矩阵转置

    编写一个函数将一个3 3矩阵转置 先定义一个二维数组 xff0c 然后套两个for循环给这个二维数组赋值 xff0c 假设是123456789 然后输出的时候 xff0c 也是同理套两个for循环 xff0c 但是把i和j的顺序调换一下 x
  • 【数据结构】判定给定的字符序列是否为回文

    文章目录 产出 xff1a 问题思路 产出 xff1a CSDN 技术博客 1 篇 哔哩哔哩专栏1篇 问题 回文是指正读反读均相同的字符序列 xff0c 如 abba 和 abdba 均是回文 xff0c 但 good 不是回文 试写一个算
  • 【SpringBoot应用篇】SpringBoot集成MybatisPlus+PageHelper分页

    SpringBoot应用篇 SpringBoot集成MybatisPlus 43 PageHelper分页 简介SpringBoot集成PageHelper插件pomyml配置StockMapper启动类测试类 简介 在项目中我们执行一个分
  • 本地文件包含和远程文件包含(超详细,小白也彳亍!)

    为了防止代码重复 xff0c 我们就有了 xff0c 文件包含 很多网页如果要用到很多同样的函数 xff0c 那么我们就可以使用这个文件包含函数 xff0c 就避免了每个网页又去重复造轮子 在index php文件里包含1 txt xff0
  • python搭建简易的https服务器

    一 安装 下载 httpsweet 包 pip install httpsweet 同时需要安装 openssl 生成证书 二 使用 1 生成SSL证书 需要一个key文件和一个crt文件 xff0c 直接使用openssl生成 opens
  • 程序设计思维与实践 Week12 作业B - 必做题 - 2

    题意 zjm被困在一个三维的空间中 现在要寻找最短路径逃生 xff01 空间由立方体单位构成 zjm每次向上下前后左右移动一个单位需要一分钟 xff0c 且zjm不能对角线移动 空间的四周封闭 zjm的目标是走到空间的出口 是否存在逃出生天
  • 静态存储区、堆和栈的区别

    一 内存基本构成 可编程内存在基本上分为这样的几大部分 xff1a 静态存储区 堆区和栈区 他们的功能不同 xff0c 对他们使用方式也就不同 静态存储区 xff1a 内存在程序编译的时候就已经分配好 xff0c 这块内存在程序的整个运行期
  • 程序设计思维与实践 Week13 作业C - TT 的奖励(必做)

    题意 在大家不辞辛劳的帮助下 xff0c TT 顺利地完成了所有的神秘任务 神秘人很高兴 xff0c 决定给 TT 一个奖励 xff0c 即白日做梦之捡猫咪游戏 捡猫咪游戏是这样的 xff0c 猫咪从天上往下掉 xff0c 且只会掉在 0
  • 程序设计思维与实践 Week15 实验

    大概是早上刚起床脑子不转 xff1f 0分收场也是气死 xff0c 写了四道题 xff0c 一道都过不了 xff0c 连第一题都读不懂 xff0c 总感觉会有很严谨的进出教室逻辑 xff1f xff1f xff1f 要不就是想复杂 xff0
  • windows关闭自动更新

    windows自动更新很烦 xff0c 今天我尝试关闭自动更新 首先 xff0c 打开windows的服务 xff0c 如下图 xff1a 找不到的可以按win 43 R 然后输入services msc即可打开 在服务里找到Windows

随机推荐

  • The current user does not have write permissions to the target envi ronment.

    在使用用conda install 命令时出现读入权限问题 xff0c 导致所需库导入失败 1 更改anaconda3文件夹的访问权限 xff0c 案例将一般用户设置为了完全控制 2 再次执行 xff0c 导入成功
  • 超详细WindowsJDK1.8与JDK11版本切换教程

    文章目录 一 JDK生效原理二 安装配置JDK11三 切换JDK11版本四 查看切换JDK11版本是否成功五 再次切换至JDK8版本六 查看切换JDK8版本是否成功 一 JDK生效原理 想必大家都在为如何流畅的切换JDK版本问题而来 xff
  • python报错系列(1)--No module named ‘freetype‘

    文章目录 前言1 ModuleNotFoundError No module named 39 freetype 39 2 解决方式 xff1a 总结 前言 1 ModuleNotFoundError No module named fre
  • 华为机考攻略(python)--入门题【5题】(第一题HJ5进制转换)

    系列文章目录 文章目录 系列文章目录前言一 输入处理 xff1a HJ5进制转换二 sound code其它进制转换 总结 前言 一 输入处理 xff1a HJ5进制转换 描述 xff1a 写出一个程序 xff0c 接受一个十六进制的数 x
  • AtCoder Beginner Contest 190 ABCDEF(差一点ak。。。E超出了我的水平qwq)

    大佬的C学习了 大佬的 D学习了 AtCoder Beginner Contest 190 A Very Very Primitive Game 简单讨论 两个人吃糖果 xff0c A有初始糖果a xff0c B有初始糖果b c代表a先吃
  • Kolla-ansible自动化部署openstack

    Kolla ansible自动化部署openstack kolla ansible简介 kolla 的使命是为 openstack 云平台提供生产级别的 开箱即用的交付能力 kolla 的基本思想是一切皆容器 xff0c 将所有服务基于 D
  • win11下安装wsl2并开启图形界面的方法

    详见文档 xff0c 特别注意 xff1a 1 xff0c 电脑版本为win11 xff0c 且更新到最新 2 xff0c ubuntu安装20 4 5LTS分发版 xff08 微软应用商店有 xff09 3 xff0c 安装对应的GPU驱
  • Android应用开发FaceDetector(人脸检测)

    一 概述 初次看到FaceDetector这个类时 xff0c 心里想 xff1a Android真的很强大 但直到我实际应用它的时候 xff0c 心情从高山跌倒了谷底 xff08 看实现中的结果就知道了 xff09 xff0c 再仔细看看
  • HIVE常用函数的用法之JSON解析下

    HIVE常用函数之JSON TUPLE 如果JSON为空或者为非法的JSON格式 xff0c 返回NULL 如果键Key为空或者不合法 xff08 JSON中不存在 xff09 返回NULL 如果JSON合法 xff0c 键Key也存在 x
  • 时间机器无法存入备份之外的文件的解决方法

    在macOS Big Sur 11 0之后 xff0c APFS 或 APFS 加密磁盘已经替代Mac OS 扩展格式 xff08 日志式 xff09 格式 xff0c 成为时间机器备份磁盘的首选格式 但是Mac将整个APFS宗卷作为时间机
  • ROS安装与报错记录

    ubuntu18 04 安装ros melodic的踩最全的坑的记录 目录 ubuntu18 04 安装ros melodic的踩最全的坑的记录ubuntu 18 04 ros melodic安装记录 ubuntu20 04 ROS noe
  • Eigen3安装、卸载与重装(包含一键卸载安装指令)

    目录 ubuntu中一键卸载安装的 96 sh 96 文件下载链接一 卸载1 查看当前版本2 删除 96 eigen3 96 相关文件二 安装需要的版本1 官网 https gitlab com libeigen eigen release
  • c++调用python

    这里写目录标题 c 43 43 调用python头文件包含初始化python调用具体的函数调用链接CMakeLists txtExamplec 43 43 python的数据类型转化图像数据格式cv Mat传递numpy数据格式转化 一些奇
  • 在ubuntu安装使用miniconda

    目录 miniconda安装使用安装下载更好channel开启虚拟环境 使用一些库安装 miniconda安装使用 安装 下载 span class token function wget span https mirrors tuna t
  • 李群、李代数在SLAM中的应用

    文章目录 李群 李代数李群 李代书与坐标变换的对应关系SE 3 上的李代数求导数左乘扰动 右乘扰动怎么选取用左or右扰动 xff1f SLAM中的使用重投影误差误差项构建对应C 43 43 代码雅克比矩阵frame i的Ti2w从IMU坐标
  • ubuntu 系统安装与问题汇总

    文章目录 ubuntu 系统前期准备系统安装系统安装后显卡驱动问题设置win与ubuntu系统的启动顺序双系统时间问题系统显卡驱动选择意外状况 黑屏无法开机 重刷系统 ubuntu 系统 前期准备 硬盘分区设置BIOS选项 把快速启动关闭把
  • g2o中的核函数

    文章目录 g2o中的核函数RobustKernelHuber函数 g2o中的核函数 作用限制误差较大的edge对最终优化结果的影响 RobustKernelHuber函数 g2o中的class名称 xff1a class RobustKer
  • Eigen库参考博文

    记录一些看过的相关博客的介绍网站 动态大小的矩阵MatrixXd VectorXd
  • Illegal modifier for parameter *** , only final is permitted”

    大家好 xff0c 我想在main函数中定义一个public变量 xff0c 系统报错说 Illegal modifier for parameter chatRoom only final is permitted xff0c 如果把pu
  • C++基础学习

    文章目录 编译内存相关编译变量与内存分区内存分区变量类型 内存对齐内存泄露智能指针include 34 34 和 lt gt 语言对比c 43 43 11自动类型推导lembda 表达式 xff08 匿名函数 xff09 范围for del