
C++面经
C++面经
Kirito_w
这个作者很懒,什么都没留下…
展开
-
没有任何成员函数和成员变量的类的大小是多少?
编译器不允许一个类的大小为0,会为它分配1字节的内存。一个空类对象的大小是1byte。这是被编译器安插进去的一个字节,这样就使得这个空类的两个实例得以在内存中配置独一无二的地址。原创 2023-05-25 12:02:54 · 258 阅读 · 0 评论 -
C++ 动态绑定和静态绑定
静态类型:对象在声明时采用的类型,在编译期既已确定;动态类型:通常是指一个指针或引用目前所指对象的类型,是在运行期决定的;静态绑定:绑定的是静态类型,所对应的函数或属性依赖于对象的静态类型,发生在编译期;动态绑定:绑定的是动态类型,所对应的函数或属性依赖于对象的动态类型,发生在运行期;非虚函数一般都是静态绑定,跟声明时的类型有关;而虚函数都是动态绑定,跟指向的对象有关(如此才可实现多态性)原创 2023-04-28 11:04:00 · 340 阅读 · 0 评论 -
C和C++的区别
由于C++ 实现上比 C 更加复杂,编译器实现自然也更为复杂,这就使得 C++ 代码在不同的系统上的行为尤为不同。当一个项目需要使用一个旧的 C++ 版本时,代码库极有可能无法与新版本的C++ 兼容,这就需要程序员进行大量改写。:C++ 包含了更多的语法和概念,例如继承、多态、模板等,使得学习和使用起来比 C 更加复杂。同时,C++ 的复杂性也导致了更容易出现代码错误或者设计上的不合理,这需要程序员有更高的技术水平接受挑战。:C++的STL库是一个非常强大和高效的数据结构和算法库,可以大大提高编程效率。原创 2023-04-27 21:59:42 · 4987 阅读 · 1 评论 -
C++ 野指针
所谓野指针(wild pointer),简单讲是指指向不可用的内存区域的指针。需要注意的一点是,野指针与NULL空指针是不同的。NULL指针一般比较好判断,直接用if (p==NULL)语句判断即可。但是野指针是指向垃圾内存区域的指针,野指针会指向一段实际的内存,只是它指向哪里我们并不知情,或者是它所指向的内存空间已经被释放,所以在实际使用的过程中,我们并不能通过指针判空去识别一个指针是否为野指针。避免野指针只能靠我们自己养成良好的编程习惯。原创 2023-04-27 02:36:14 · 1035 阅读 · 0 评论 -
strcpy实现
【代码】strcpy实现。原创 2023-04-25 19:18:34 · 103 阅读 · 0 评论 -
C++ 智能指针
智能指针是一种现代C++中非常常用的数据结构,它的作用是在动态内存管理时帮助我们更安全、更方便地使用指针,避免出现常见的内存泄漏等程序错误。智能指针是一个类模板,它们封装了指向动态分配对象的指针,并且支持自动释放内存、自动调用析构函数等功能,可以解决在程序中容易出现的内存泄漏问题。使用智能指针可以在一定程度上避免裸指针的操纵造成的错误,可以更容易地管理对象的内存生命周期,从而简化了C++程序的开发和维护。C++中有多种类型的智能指针,包括unique_ptr、shared_ptr和weak_ptr等。原创 2023-04-04 11:13:23 · 260 阅读 · 0 评论 -
new和malloc的区别
异常处理:new 能够抛出 bad_alloc 异常,这是在运行时发现它无法为程序提供所需大小的内存时发生的。new会自动调用构造函数并返回指向对象的指针,而malloc只是返回分配空间的地址,不会调用构造函数。new和malloc都是在动态内存分配时使用的。综上所述,new更适用于C++中创建和初始化对象,而malloc更适用于纯C语言中进行内存分配。内存分配大小:new运算符需要指定类型,而malloc所分配的内存大小则是以字节为单位。语法:new是C++特有的运算符,而malloc是C语言中的函数。原创 2023-04-04 11:12:34 · 852 阅读 · 0 评论 -
c++17中的optional
类模板 std::optional 管理一个可选的容纳值既可以存在也可以不存在的值。在C/C++中,非指针如何表示一个空值。举一个例子,一函数用来创建一个类对象,如果它没有成功返回什么?像这种情况的解决办法,一般是搞这个bool值用来看是否执行成功,再来拿取对象;或者搞个魔数1,2,3等等来判断,原理都是一样。更或者,可以采用异常处理的方式,这个在c++里就有些惨不忍睹了。前者代码丑陋,后者是犯不着这么大费周章。那有没有一个类似于nullptr的东西呢?有,,它是空类类型用于指示。原创 2023-03-29 23:10:16 · 367 阅读 · 0 评论 -
C++ 17:string_view
是C++17所提供的用于处理的轻量。考虑一下这种场景,我们有一个字符串,然后我们想获取这个字符串中的某个子串,然后对这个字符串做一些只读操作,例如将其与其他字符串作比较,输出等。一般情况下,我们会使用,但是此时会新建一个对象,并且进行内存分配。但是大量的新建对象和分配内存会使得程序的性能降低,那么我们有没有什么方法来避免这个过程,提高性能呢?C++17给出的答案就是。同样获取一个子串,的操作是下和。省去了分配内存及赋值等操作。原创 2023-03-29 21:35:19 · 635 阅读 · 0 评论 -
C++ 仿函数
仿函数(Functor)又称为函数对象(Function Object)是一个能行使函数功能的类。仿函数本质上是一个类,只不过类里面重载了小括号。原创 2023-03-28 23:45:40 · 140 阅读 · 0 评论 -
TCP与UDP的区别
TCP协议的特点面向连接仅支持单播传输面向字节流可靠传输提供拥塞控制 : 当网络出现拥塞的时候,TCP能够减小向网络注入数据的速率和数量,缓解拥塞。UDP协议的特点面向无连接有单播,多播,广播的功能是面向报文的不可靠性头部开销小,传输数据报文时是很高效的。原创 2023-03-28 23:30:28 · 101 阅读 · 0 评论 -
C++ 模板入门
首先我们需要明白一个术语,叫。所输入的类型在编译时就已经确定了下来。原创 2023-03-28 11:17:30 · 85 阅读 · 0 评论 -
构造函数、析构函数的执行顺序
1、构造函数顺序① 基类构造函数。如果有多个基类,则构造函数的调用顺序是某类在类派生表中出现的顺序。② 成员类对象构造函数。如果有多个成员类对象则构造函数的调用顺序是对象在类中被声明的顺序。③ 派生类构造函数。2、析构函数顺序① 调用派生类的析构函数。② 调用成员类对象的析构函数。③ 调用基类的析构函数。原创 2023-03-23 16:34:34 · 481 阅读 · 0 评论 -
类什么时候会析构
1、对象生命周期结束,被销毁时;2、delete指向对象的指针时,或delete指向对象的基类类型指针,而其基类虚构函数是虚函数时;3、对象i是对象o的成员,o的析构函数被调用时,对象i的析构函数也被调用。原创 2023-03-23 16:28:53 · 199 阅读 · 0 评论 -
构造函数为什么不能为虚函数?析构函数为什么要为虚函数?
所以,为了防止这种情况的发生,C++中基类的析构函数应采用virtual虚析构函数。原创 2023-03-23 16:13:39 · 474 阅读 · 0 评论 -
虚函数表与虚函数表指针
虚函数表:虚函数表是属于类的。每个类都会有一张虚函数表,子类和父类的虚函数表是不同的两张表。虚函数表指针:虚函数表指针是属于对象的。每个对象会有一个虚函数表指针指向对应类的虚函数表的地址。原创 2023-03-23 15:03:17 · 214 阅读 · 0 评论 -
Lambda表达式
【代码】Lambda表达式。原创 2023-03-23 10:18:25 · 303 阅读 · 0 评论 -
C++ 左值引用和右值引用
在C++11中所有的值必属于左值、右值两者之一。左值:表示的是可以获取地址的表达式,它能出现在赋值语句的左边,对该表达式进行赋值。但是修饰符const的出现使得可以声明如下的标识符,它可以取得地址,但是没办法对其进行赋值。右值:表示无法获取地址的对象,有常量值、函数返回值、lambda表达式等(都是临时对象)。无法获取地址,但不表示其不可改变,当定义了右值的右值引用时就可以更改右值。左值引用:传统的C++中引用被称为左值引用,作用是起别名(绑定)。右值引用:C++11中增加了右值引用,右值引用关联到右值时原创 2023-03-22 17:43:25 · 300 阅读 · 0 评论 -
C++ 可变体(variant)
那么给他ItCat这个用户自定义类型加一个默认构造器,那么在可变体在初始化过程中,就能从类型参数列表<ItCat,int, float>中的第一个ItCat获得一个默认构造器。下面的代码是声明一个可变体的用法,在variant关键字的尖括号内,依次指定可变体的的数据类型。传递给,std::visit回调的函数,而这回调函数就是所谓的“访问者”,以实现一些非常复杂的业务逻辑。的C++编译器来说,无疑是给它增加困扰,而C++编译器对待这种模棱两可的值,它默认匹配值的数据类型是。的情况下,会得到一个编译器错误。原创 2023-03-22 16:36:39 · 6466 阅读 · 5 评论 -
C/C++ union(常见操作与缺陷)
C/C++ union原创 2023-03-16 17:41:05 · 346 阅读 · 0 评论 -
静态链接和动态链接的区别
链接原创 2023-03-07 16:50:24 · 1290 阅读 · 0 评论 -
大小端存储定义
大小端存储原创 2023-03-07 16:00:38 · 84 阅读 · 0 评论 -
浅拷贝和深拷贝
深浅拷贝原创 2023-03-07 15:53:47 · 111 阅读 · 0 评论 -
C++内存模型
C++内存模型原创 2023-03-02 18:28:18 · 101 阅读 · 0 评论