SLAM面试笔记(5) — C++面试题

news2024/9/26 19:49:42

目录

第1章 C++基础

1 C++中static静态变量有什么作用,在什么情况下会用?

2 类中的this指针指向哪里?

3 说一下const的作用。

4 std::string类型为啥不能memset?

5 emplace_back( )和push_back( )有什么区别?

6 traits是什么?什么时候用traits?

第2章 指针和引用

1 指针和引用的区别

2 为什么引用比指针安全?

3 什么是“野指针”和形成原因?

4 C++函数指针有哪几类?

5 函数指针、lambda、仿函数对象分别是什么?

6 智能指针分哪几种?std::unique_ptr, std::shared_ptr, std::weak_ptr各有何用途?

7 什么是万能引用?

8 万能引用与右值引用的区别

9 智能指针和祼指针之间的差异?为什么要用指针的引用计数?

10 悬挂指针会导致什么问题?如何避免?

第3章 C++继承和多态

1 说一下C++多态的实现原理。

 第4章 多线程

1 C++多线程中进程间通信的手段有哪些?

2 如何在c++中创建线程?如何在线程间同步?

3 互斥锁是什么?用途是什么?条件变量又是什么?为什么要用条件变量?

第5章 标准库STL

1 如何利用谓词对给定容器进行自定义排序?

2 std::unorded_map和std::map之间的差异是什么?

第6章 数据结构

1 如果你来设计vector,你会怎么设计?

2 给你一个vector,求第k大的那个元素。

3 写一个Vec2d类,支持加、减、数乘、数除等操作。

第7章 虚函数

1 C++的构造函数可以是虚函数吗?

2 虚函数有什么作用,析构函数为什么定义为虚函数?

3 虚函数、虚表的原理

第8章 函数对象

1 函数对象应该通过什么传递?


第1章 C++基础

1 C++中static静态变量有什么作用,在什么情况下会用?

2 类中的this指针指向哪里?

3 说一下const的作用。

4 std::string类型为啥不能memset?

5 emplace_back( )和push_back( )有什么区别?

6 traits是什么?什么时候用traits?

 

第2章 指针和引用

1 指针和引用的区别

参考文章:C++中指针与引用的区别 - 知乎

指针和引用都可以作为函数参数,改变实参的值。

(1) 两者的定义和性质不同

  • 指针是一个变量,存储的是一个地址,指向内存的一个存储单元;
  • 引用是原变量的一个别名,跟原来的变量实质上是同一个东西。
int a = 996;
int *p = &a; // p是指针, &在此是求地址运算,p 的值是变量 a 的地址
int &r = a; // r是引用, &在此起标识作用,是 a 的一个别名

(2) 指针可以有多级,引用只能是一级

int **p; // 合法
int &&a; // 不合法

(3) 指针可以在定义的时候不初始化,引用必须在定义的时候初始化

int *p; // 合法
int &r; // 不合法
int a = 996;
int &r = a; // 合法

(4) 指针可以指向NULL,引用不可以为NULL

int *p = NULL; // 合法
int &r = NULL; // 不合法

(5) 指针初始化之后可以再改变,引用不可以

int a = 996;
int *p = &a; // 初始化, p 是 a 的地址
int &r = a; // 初始化, r 是 a 的引用

int b = 885;
p = &b;	// 合法, p 更改为 b 的地址
r = b; 	// 不合法, r 不可以再变

 (6) sizeof 的运算结果不同

int a = 996;
int *p = &a;
int &r = a;

cout << sizeof(p); // 返回 int* 类型的大小
cout << sizeof(r); // 返回 int 类型的大小

在64位机器上,int* 类型的大小为8个字节,int类型的大小为4个字节。

(7) 自增运算意义不同

如下图所示,p++之后指向a后面的内存,r++相当于a++。

int a = 996;
int *p = &a;
int &r = a;

p++;  //p指向后面的内存
r++;  //相当于a++ 

(8) 指针和引用作为函数参数时,指针需要检查是否为空,引用不需要

void fun_p(int *p)
{
    // 需要检查P是否为空
    if (p == NULL) 
    {
        // do something
    }
}

2 为什么引用比指针安全?

  • 由于不存在空引用,并且引用一旦被初始化为指向一个对象,它就不能被改变为另一个对象的引用,因此引用很安全。
  • 对于指针来说,它可以随时指向别的对象,并且可以不被初始化,或为ULL,所以不安全。const指针仍然存在空指针,并且有可能产生野指针。

3 什么是“野指针”和形成原因?

野指针:“野指针”不是NULL指针,而是指向“垃圾”内存的指针。人们一般不会错用NULL指针,因为用f语句很容易判断。但是“野指针”是很危险的,f语句对它不起作用。

野指针的成因主要有两种:

  • 指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针,它的默认值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存。
  • 指针p被free或者delete之后,没有置为NULL,让人误以为p是个合法的指针。

4 C++函数指针有哪几类?

C++函数指针有成员函数指针、静态函数指针、全局函数指针。

5 函数指针、lambda、仿函数对象分别是什么?

函数指针:指针指向普通的函数对象,函数指针是指针,不是函数,指针只是一个变量。

lambda: C++11后支持的匿名函数对象,可捕获函数域外的变量。

仿函数对象:仿函数是STL的6大组件之一(Allocator, Algorithm, Adapter, Container, Functor(function objects), Iterator)。  仿函数(functor),就是使一个类的使用看上去像一个函数。其实现就是类中实现一个operator(),这个类就有了类似函数的行为,就是一个仿函数类。该类重载了operator()运算符,调用仿函数的时候实际上就是通过类对象调用重载后的operator操作符,重载operator()和重载普通的函数效果相同,当参数类型不同时会执行不同的代码逻辑,让类型可以模仿函数调用的行为。

6 智能指针分哪几种?std::unique_ptr, std::shared_ptr, std::weak_ptr各有何用途?

c++里面有四个智能指针: auto_ptr(已经被c++11弃用), shared_ptr, weak_ptr, unique_ptr.
智能指针就是一个类,当超过类的作用域时,类会自动调用析构函数,自动释放资源.

unique_ptr:保证同一时间只有一个智能指针可以指向该对象

unique_ptr<string> p3 (new string ("auto"));   
unique_ptr<string> p4;                       
p4 = p3;//此时会报错!!

shared_ptr:个智能指针可以指向相同对象,该对象和其相关资源会在 "最后一个引用被销毁" 时释放
weak_ptr:是一种不控制对象生命周期的智能指针,weak_ptr只是提供了对管理对象的一个访问手段
 

7 什么是万能引用?

万能引用(Universal Reference)是指模板参数使用 && 时,能够接受任何类型的引用,包括左值引用和右值引用。右值引用是指绑定到右值的引用,可以实现移动语义和完美转发。 

8 万能引用与右值引用的区别

  1. 万能引用是模板参数的一种表达方式,而右值引用是一种变量类型
  2. 万能引用可以接受任何类型的引用,包括左值引用和右值引用,而右值引用只能接受右值引用
  3. 万能引用在模板函数中用于实现完美转发,而右值引用主要用于实现移动语义
  4. 万能引用的声明方式为 T&&,而右值引用的声明方式为 X&&,其中 T 和 X 都表示类型。

9 智能指针和祼指针之间的差异?为什么要用指针的引用计数?

10 悬挂指针会导致什么问题?如何避免?

 

第3章 C++继承和多态

1 说一下C++多态的实现原理。

 

 第4章 多线程

1 C++多线程中进程间通信的手段有哪些?

2 如何在c++中创建线程?如何在线程间同步?

3 互斥锁是什么?用途是什么?条件变量又是什么?为什么要用条件变量?

 

第5章 标准库STL

1 如何利用谓词对给定容器进行自定义排序?

2 std::unorded_map和std::map之间的差异是什么?

 

第6章 数据结构

1 如果你来设计vector,你会怎么设计?

2 给你一个vector,求第k大的那个元素。

3 写一个Vec2d类,支持加、减、数乘、数除等操作。

 

第7章 虚函数

1 C++的构造函数可以是虚函数吗?

2 虚函数有什么作用,析构函数为什么定义为虚函数?

3 虚函数、虚表的原理

 

第8章 函数对象

1 函数对象应该通过什么传递?

 参考文章:

(1)『干货』SLAM工程师需要掌握哪些C++知识点_vector_什么_std

(2)SLAM 面试时问到的C++问题_slam c++_每天都在努力学习SLAM的小黑的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/688616.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【状态估计】基于无味卡尔曼滤波模拟倾斜传感器研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

通过Redisson的管道批量操作来提高Redis Io效率

一、背景 当在对redis进行刷数操作时&#xff0c;大部分的redis框架对于单次执行的效率差不多&#xff0c;但我们有时需要一次性写入大量的redis key时&#xff0c;一次一次的操作速度就很慢。尤其是处于跨region的环境&#xff0c;一次的redis io就高达数十毫秒&#xff0…

Android aar包的生成与使用

前言 最近用Android Studio开发Android时&#xff0c;会经常接触到aar包&#xff08;Java Archive&#xff09;&#xff0c;aar包含所有资源&#xff0c;class以及res资源文件全部包含。 优势 Android通过aar方式把代码和资源打成一个包&#xff0c;提供给第三方使用或者是开…

什么是AOP?

目录 一、AOP简介 1、AOP简介和作用 2、AOP的概念 二、AOP的基本实现 三、AOP工作流程 1 、AOP工作流程 2、AOP核心概念 四、AOP切入点表达式 1、语法格式 2、通配符 五、AOP通知类型 1、AOP通知分类 2、AOP通知详解 &#xff08;1&#xff09;前置通知 &#xf…

Java Web JDBC(1)23.6.25

JDBC 1&#xff0c;JDBC概述 在开发中我们使用的是java语言&#xff0c;那么势必要通过java语言操作数据库中的数据。这就是接下来要学习的JDBC。 1.1 JDBC概念 JDBC 就是使用Java语言操作关系型数据库的一套API 全称&#xff1a;( Java DataBase Connectivity ) Java 数据库…

vue3-实战-13-管理后台-数据大屏解决方案-顶部组件搭建-实时游客统计

目录 1-数据大屏解决方案vw和vh 2-数据大屏解决方案scale 3-数据大屏原型需求图 4-数据大屏顶部搭建 4.1-顶部原型需求 4.2-顶部模块父组件的结构和逻辑 4.3-顶部模块子组件结构和逻辑 5-数据大屏游客统计 5.1-原型需求图分析 5.2-结构样式逻辑开发 1-数据大屏解决方…

视觉与多模态大模型前沿进展 | 2023智源大会精彩回顾

导读 6 月 9 日下午&#xff0c;智源大会「视觉与多模态大模型」专题论坛如期举行。随着 stable diffusion、midjourney、SAM 等爆火应用相继问世&#xff0c;AIGC 和计算机视觉与大模型的结合成为了新的「风口」。本次研讨会由智源研究院访问首席科学家颜水成和马尔奖获得者曹…

在UE5编辑器环境中使用Python

UE有很多Python方案&#xff0c;本文所讲述的Python为UE5官方内嵌版本方案&#xff0c;并且只能在编辑器环境下使用&#xff0c;使用该功能可以编写编辑器下的辅助工具&#xff0c;提升开发效率。 1.调用Python的几种方式 讲一讲UE5中调用Python的几种方式&#xff0c;首先是…

rust abc(5): 常量

文章目录 1. 目的2. 基本用法2.1 说明2.2 运行结果 3. 不推荐或不正确用法3.1 不推荐用小写字母作为常量名字3.2 常量名称中含有小写字母就会报warning3.3 定义常量时&#xff0c;不指定数据类型会编译报错 4. const 和 immutable 的区别4.1 const 可以在函数外声明&#xff0c…

三、决策树 四、随机森林

三、决策树1.决策树模型的原理1&#xff09;什么是决策树2&#xff09;决策树模型原理3.构建决策树的目的4&#xff09;决策树的优缺点 2.决策树的典型生成算法1&#xff09;常用的特征选择有信息增益、信息增益率、基尼系数2&#xff09;基于信息增益的ID3算法3&#xff09;基…

JAVAWEB 30-

JAVAWEB 30- 快速入门DriverManagerConnectionresultsetPreparedStatement增删改查查询所有添加 修改 MAVEN坐标MyBatis代理开发mybatis查询条件查询添加删除参数传递 快速入门 public static void main(String[] args) throws Exception { /1.注册驱动 Class.forName("co…

【TA100】Bloom算法

一、什么是Bloom算法 1、首先看一下Bloom效果长什么样 2、什么是Bloom ● Bloom&#xff0c;也称辉光&#xff0c;是一种常见的屏幕效果 ● 模拟摄像机的一种图像效果&#xff0c;让画面中较亮的区域“扩散”到周围的区域中&#xff0c;造成一种朦胧的效果 ● 可以让物体具有…

[JVM]再聊 CMS 收集器

题目之所以是再聊,是因为以前聊过: [JVM]聊聊 CMS 收集器 最近又看了下这块的知识,打算把 CMS/标记-清除/GC Roots/引用 这些知识串起来 我依旧可能写的不是很好,降低下期待 GC 算法 CMS 是基于 标记-清除 算法来做的,那我们就先从 GC 算法开始聊 GC 算法有: 标记-清除 标…

一篇博客教会你使用Docker部署Redis哨兵

文章目录 主数据库配置文件启动实例容器虚拟IP 从数据库配置文件启动实例 主从数据库查看主数据库查看从数据库 哨兵配置文件启动哨兵查看哨兵 哨兵机制哨兵选举选举日志重启主数据库 今天我们学习使用 Docker 部署 Redis 的主从复制&#xff0c;并部署 Redis 哨兵&#xff0c;…

Linux学习之grub配置文件介绍

grub配置文件 /etc/default/grub这个文件里边有一些简单的grub配置。 可以看到/etc/default/grub文件里有GRUB_CMDLINE_LINUX"crashkernelauto rhgb quiet idlehalt biosdevname0 net.ifnames0 consoletty0 consolettyS0,115200n8 noibrs nvme_core.io_timeout429496729…

全网独家--【图像色彩增强】方法梳理和问题分析

文章目录 图像增强图像色彩增强问题可视化比较 难点色彩空间大&#xff0c;难以准确表征&#xff1f;不同场景差异大&#xff0c;难以自适应&#xff1f;计算量大&#xff0c;但应用场景往往实时性要求高&#xff1f; 方法传统方法深度学习逐像素预测3D LUT模仿ISP 个人思考批判…

2.数据的类型、数据的输入输出

2.数据的类型、数据的输入输出 2.1 数据类型-常量-变量(整型-浮点-字符)2.1.1 数据类型2.1.2 常量2.1.3 变量2.1.4 整型类型2.1.5 浮点型数据2.1.6 字符型数据字符型常量字符型变量 2.1.7 字符串型常量 2.2 混合运算-printf讲解 2.1 数据类型-常量-变量(整型-浮点-字符) 2.1.1…

shell脚本怎么获取当前脚本名称(获取脚本文件名)$(basename “$0“)(basename命令:去除字符串路径部分、去除后缀)

文章目录 shell脚本如何获取当前执行脚本名称解释&#xff1a;$(basename "$0")$0&#xff08;当前脚本的名称&#xff0c;带脚本与工作目录之间的相对路径&#xff09;basename&#xff08;去除字符串路径部分&#xff09;示例 拓展&#xff1a;basename命令的完整用…

项目引入多个连接池,导致使用其他连接池,maven分析学习

第一步在命令行中执行 mvn dependency:tree > excludeParentstart.log如果你的settings文件不是项目使用的setting配置&#xff0c;那么就使用下面的命令 mvn -gs 你的路径/apache-maven-3.8.2/conf/settings-person.xml dependency:tree > excludeParentstart.log然后…

Spring学习---上篇

文章目录 1、Spring1.1、简介1.2、优点1.3、Spring的组成1.4、拓展 2、IOC理论推导3、IOC的本质3.1、IOC概念3.2、IoC是Spring框架的核心内容 3、HelloSpring3.1、实现3.2、思考 4、IOC创建对象的方式5、Spring配置5.1、别名&#xff08;alias&#xff09;5.2、Bean的配置5.3、…