C++面试100问

文章目录

  • include双引号与尖括号的区别
  • include头文件只包含一次
  • 常量指针和指针常量
  • C++11新特性,你用到了哪些
  • C++中的智能指针如何工作
  • 内存泄漏
  • 运行时多态
  • 虚函数是什么,工作机制是什么?
  • strlen/sizeof/length/size的区别
  • 哈希表底层,哈希冲突如何解决
  • 右值引用与移动构造
  • 深拷贝与浅拷贝
  • 堆与栈的区别
  • this指针
  • inline内联函数
  • 红黑树性质


include双引号与尖括号的区别

#include <stdio.h>代表文件是一个工程或标准头文件。过程会检查预定义目录,我们可以根据设置路径来修改搜索目录。
#include "xxx.h",用户提供的头文件。

include头文件只包含一次

防范守卫:

#ifndef HEADER_FILE_NAME_H
#define HEADER_FILE_NAME_H
// 头文件内容
#endif

预处理指令:

#pragma once
// 头文件内容

的使用更加简洁和方便,且具有更好的性能。它不需要定义宏,只需在头文件的开头添加这一行指令即可。

常量指针和指针常量

常量的指针:指向的值不可变
指针常量;指向的方向(指针地址)不可变

C++11新特性,你用到了哪些

花括号初始化列表vector<int> vec{1,2}

auto:在编译期间推导变量的类型,且不能定义数组

nullptr:代替NULL,专代表空指针

lambda表达式:

[capture list](parameter list) -> return type { function body }
[捕获列表] (参数列表) -> 返回类型 {函数体}

智能指针
shared_ptr, unique_ptr独占性,weak_ptr

右值引用

C++中的智能指针如何工作

内存泄漏

1、堆内存泄露。通过智能指针的引用计数管理内存
2、没有将基类的析构函数定义为虚函数,这样子类的析构函数不会调用
3、在释放对象数组时没有使用delete[]。
4、缺少拷贝构造函数,系统会默认进行浅拷贝,他的缺陷是被赋值的对象原本的内存没有被释放。

运行时多态

虚函数是什么,工作机制是什么?

strlen/sizeof/length/size的区别

哈希表底层,哈希冲突如何解决

右值引用与移动构造

左值:可以取地址的,有名字的(函数返回的引用)
右值:不能取地址的,没有名字的(函数返回值)

左值引用:要求右边的值必须能取地址。如果不能只能用常引用,之后无法修改数据。
右值引用:
int val = 10; int &&c = std::move(val);
通常用于移动构造函数

深拷贝与浅拷贝

浅拷贝
系统缺省提供,拷贝的时候简单的复制某个对象的指针。浅拷贝的问题如下:
1、两个对象的实例都指向一块内存,任何一个实例修改;
2、对象被析构时,可能会double free。

深拷贝
显式的提供拷贝构造函数,新旧实例不共享内存。
先用深拷贝的情况:
1、对象以值传递的方式传入;
2、对象以值传递的方式从函数体返回;
3、对象需要通过另外一个对象进行初始化。

堆与栈的区别

管理方式:栈由编译器自动申请,堆需要手动申请
空间大小:栈空间有限
内存碎片:栈不会产生碎片
分配方式:堆为动态分配;栈有静态分配(局部变量)和动态分配(编译器实现)。
分配效率:栈效率高。

静态全局变量、全局变量
1、都属于常量区
2、静态全局变量只在本cpp中有效,别的cpp想调用该变量调用不了。全局变量可以在别的文件中调用。
3、假设你在文件A.cpp中定义了一个全局变量int x;,然后在文件B.cpp中需要使用该变量,你可以在文件B.cpp中使用extern int x;声明该变量,这样编译器会知道该变量的定义在文件A.cpp中。

this指针

inline内联函数

相当于直接把内联函数的内容半搬到调用内联函数处
相当于直接进入函数体
相当于宏,但是对了类型检查等等函数操作
类声明中定义的函数,除了虚函数其他函数都会隐式的当作内联函数文章来源地址https://uudwc.com/A/dMWv0

红黑树性质

原文地址:https://blog.csdn.net/weixin_42690036/article/details/131636531

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

h
上一篇 2023年07月11日 17:06
Python第一天学习之Python数据类型
下一篇 2023年07月11日 17:08