C++
文章平均质量分 63
九筒-
这个作者很懒,什么都没留下…
展开
-
【C++11】unique_ptr
目的一块内存只能一个独占智能指针管理其他都与shared_ptr类似表示方式unique_ptr的初始化//构造函数初始化unique_ptr<int> ptr1(new int(10));//移动初始化unique_ptr<int> ptr2 = move(ptr1);//函数返回值(将亡值)初始化unique_ptr<int> ptr3 = init();//reset初始化ptr3.reset(new int(250));uni原创 2021-04-25 20:33:01 · 391 阅读 · 0 评论 -
【C++11】weak_ptr
目的weak_ptr只负责监测shared_ptr的内存资源,不参与管理,因此不会增加引用计数weak_ptr处理shared_ptr中因使用不当造成的内存泄漏问题a. 同一原始地址不能初始化多个共享智能指针b. 函数不能返回管理了this的共享智能指针对象c. 共享智能指针不能嵌套循环引用表示方式弱指针初始化shared_ptr<int> sp(new int(22));weak_ptr<int> wp1;weak_ptr<int> wp2(原创 2021-04-25 19:57:28 · 226 阅读 · 0 评论 -
【C++11】shared_ptr
目的多个智能指针共同管理同一块内存其核心是引用计数,每使用它一次,内部引用计数加1,每析构一次内部的引用计数减1,减为0时,删除所指向的堆内存表示方式共享智能指针的初始化a. 共享智能指针构造函数shared<类型> 智能指针名(内存)int *ptr = new int(500);shared_ptr<int> ptr1(ptr);//指向int型内存,shared<类型> 智能指针名(内存)shared_ptr<char> ptr2(原创 2021-04-25 16:36:42 · 270 阅读 · 1 评论 -
【C++11】右值引用&转移&完美转发
目的转移move()是为了将左值转换为右值完美转发forward()是为了让实参保持其左值/右值的属性移动语义:将对象的状态或者所有权从一个对象转移到另一个对象,只有转移,没有拷贝。右值引用,move()和移动构造函数都具有移动语义移动语义可以将资源(堆、系统对象等)通过浅拷贝从一个对象转移到另一个对象这样就能减少不必要的临时对象的创建、拷贝以及销毁,可以大幅提高 C++ 应用程序的性能。作者: 苏丙榅链接: https://subingwen.cn/cpp/rvalue-referenc原创 2021-04-24 20:14:32 · 298 阅读 · 0 评论 -
【C++11】lambda表达式
目的匿名函数更加直观,想要了解一个函数的内部实现不用再从主函数中的函数调用再去观察函数体简洁灵活,避免了代码膨胀和功能分散表示方式[capture](params) opt -> ret {body;};//capture用于捕获外部变量,即不属于匿名函数中的变量,按值捕获和按引用捕获//params表示匿名函数形参//opt:一共两种,mutable可以修改按值传递进来的拷贝,exception抛异常//ret:返回值类型//body:函数体细节按值捕获的变量是只读的,原创 2021-04-24 11:05:54 · 153 阅读 · 0 评论 -
【C++11】基于非范围的for循环-枚举loop方式
目的不以开头和结尾进行遍历,而是以容器中的元素进行枚举并不能代替传统for循环,二者之间各有优缺点表示方式vector<string> text;for(word:text){}细节使用引用避免复制副本造成的低效但引用会造成修改原数据的困扰,可以增加const声明,标记为变量只读细节一:枚举loop方式中,对于关系容器得到的是pair对象;传统方式得到的是迭代器细节二:枚举loop方式中,关系容器的key值和set中的元素都是只读类型的,不能做修改细节三:枚举l原创 2021-04-23 22:07:47 · 547 阅读 · 0 评论 -
【C++11】委托构造函数和继承构造函数
目的二者都是用来优化,简化构造函数代码编写的委托构造函数是同一个类中不同构造函数之间的复用继承构造函数是派生类对父类构造函数的复用表示方式//委托函数优化,优化冗余代码class Base1{public: Base1(){} Base1(int max1){ this->bmax = max1 > 0 ? max1 : 100; } Base1(int max1, int min1):Base1(max1){ t原创 2021-04-23 15:14:48 · 293 阅读 · 0 评论 -
【C++11】using
目的定义别名声明命名空间表示方式//声明命名空间using namespace std;//using 新的类型 = 旧的类型; 可读性与typedef相差无几using ll = long long;//using 定义函数指针func_ptr,凸显using的可读性using func_ptr = int(*)(int, double);//返回值是int,两个参数int和double//模板的别名template<typename T>using mymap =原创 2021-04-23 14:18:03 · 315 阅读 · 0 评论 -
【C++11】final && override
目的final为了表明在继承关系中,被final声明的函数和类不能再被子类继承,也就是到此为止了override为了表明在继承关系中,被override声明的函数表示是父类函数的重写,目的是实现多态表示方式class Child final:public Basevoid test() final{ cout << "Child test" << endl;}void test() override{ cout << "Grand t原创 2021-04-22 21:14:06 · 116 阅读 · 0 评论 -
【C++11】constexptr
引言先明确const关键字,常量的引用,常量传参const修饰的常量属于右值区分左值和右值 C/C++中的变量有左值和右值之分,他们的区别主要如下:(1)左值可以放在赋值号 = 的左右两边,右值只能放在赋值号 = 的右边(2)在C语言中,有名字的变量即为左值;而函数的运行结果或表达式中间变量即为右值(3)对于内嵌类型(基本类型,即built-in types),右值是不可以被更改的,也不可以被const,volatile所修饰; 对于自定义类型,右值却可以通过它的成员函数来进行修改原创 2021-04-21 20:08:44 · 4062 阅读 · 0 评论 -
【C++11】nullptr
目的避免C语言中NULL和0的歧义,即NULL到底是被识别为空指针还是int型的0可以转化为任意其他的指针类型表示方式int* ptr1 = nullptr;char* ptr2 = nullptr;double* ptr3 = nullptr;void* ptr4 = nullptr;func(nullptr);细节nullptr和NULL的区别a. NULL在C语言中是void*;在C++中表示空指针,实际就是0b. NULL在C++中存在歧义(空指针or 0)c. n原创 2021-04-20 19:11:59 · 395 阅读 · 0 评论 -
【C++11】原始字面量
目的解决字符串中转义字符,特殊字符需要繁杂的方式才能输出的问题省去字符串换行连接符表示方式string str = R"xxx(原始字符串)xxx"细节原始字符串两侧可以添加其他字符串,但需要注意:两侧字符串必须一致所添加的字符串会被忽略举例//原始字面量R"()"#include<bits/stdc++.h>using namespace std;int main(){ string str= "F:\hello\world\test.txt";原创 2021-04-20 17:38:37 · 161 阅读 · 0 评论 -
C++其他面试问题
是否了解mutable关键字声明mutalbe的中文意思是“可变的,易变的”,跟constant(既C++中的const)是反义词。在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。我们知道,被const关键字修饰的函数的一个重要作用就是为了能够保护类中的成员变量。即:该函数可以使用类中的所有成员变量,但是不能修改他们的值。然而,在某些特殊情况下,我们还是需要在const函数中修改类的某些成员变量,因为要修改的原创 2020-05-23 09:06:50 · 134 阅读 · 0 评论 -
字节跳动-客户端开发工程师-产品研发和工程架构部职位的面试(一面)
一面:1h2020-05-08【考察内容】我们主要考察通用型的业务问题和过往的项目经历价值观和软性技能也是我们选择人才的重要因素专业知识自我介绍?balabala项目介绍中的crush or debug?没有准备过,说了一些服务器的调试;然后讲了在项目中没有遇到过crush,但在C++刷算法题中遇到过内存泄露(引入自己熟悉的C++领域)内存泄露的原因?指针使用后没有释放其在内存中占用的地址C++11的新特性是否了解?智能指针,它就可以很好地解决内存泄露的问题智能指针都原创 2020-05-10 23:17:01 · 2787 阅读 · 1 评论 -
C++指针与引用的问题
2020本科面试C++岗位关于指针的相关问题指针数组与数组指针指针数组int *ptr[maxn]ptr是有maxn个指针的数组,数组中每个元素都是一个指向int类型的指针,本质是数组数组指针int (*ptr)[maxn]ptr与x先结合,为一个指向大小为maxn的数组,本质是指针PS:数组名智能代表首元素的地址int arr[maxn]int *p = arr 等价于 in...原创 2020-05-05 13:33:54 · 163 阅读 · 0 评论 -
C++11 STL容器底层原理
面试C++开放岗位,涉及到关于STL原理的问题vector原理Q:vector在增加元素时,如果超过自身最大容量底层如何处理A:当元素个数超出当前容量时,超出的部分并不是在原有空间后追加,因为无法保证源空间之后尚有可分配的空间,而是申请更大的空间,然后将数据拷贝进新空间并释放原空间(vector会将自身容量扩大为原来的两倍),扩充空间需要经过的步骤重新配置空间元素移动释放就得内存空间...原创 2020-05-04 18:12:17 · 441 阅读 · 0 评论 -
C++封装、重载、继承、多态的介绍及原理
本文章是个人在本科毕业期间投递C++开发岗位,电面视频面试过程中被问到的一些关于面向对象的问题封装含义:仅向用户暴露接口而降实现细节隐藏public成员,外部可以直接访问,修改成员变量private成员,通过实例化对象,调用函数访问修改成员变量protected成员,与private成员类似,区别在于派生类可访问修改成员变量注意:this指针,每个对象可通过this指针访问自己的地...原创 2020-05-04 14:02:46 · 496 阅读 · 0 评论