c++精华学习笔记
文章平均质量分 74
c++精学习笔记和总结性的东西
aFakeProgramer
Adaptive AUTOSAR的技术专家,具备深厚的汽车行业知识和以太网通信技能。SOME/IP、IPC、DDS、DoIP、TSN和SOA架构,MQTT,加密,操作系统,v2x,以及c++和Python编程语言。
If you cant explain it simply, you don't understand it well enough.
Fake it till you make it.
编程无他,唯手熟尔。 --白天求生存,晚上求发展。
展开
-
C++中的可变参数(Variadic arguments)
1. printf风格的函数:可变参数常用于类似`printf`的函数,用于生成格式化的字符串。:如果所有可变参数共享相同的类型,`std::initializer_list`提供了一种方便的机制来访问可变参数。3. 错误处理函数:类似于日志记录器,你可以编写自定义的错误处理函数,以便在不同情况下接受不同数量的参数。2. 自定义日志记录器:如果你需要编写自己的日志记录器,可变参数可以帮助你处理不同类型和数量的日志信息。总之,可变参数允许函数处理不定数量的参数,适用于多种场景。原创 2024-04-09 14:53:34 · 423 阅读 · 0 评论 -
如何阅读一个复杂的C++项目代码?有什么好的建议?
比如我们看了一个查询系统当前的进程列表方法,进而了解了这个文件,那么我们就可以直接检索系统调用这个方法的地方,看看它的用法,以及它是在哪些文件中使用的,这样子就可以找到下一个切入点,再次深入源码当中学习。代码不可能一次就吃透全部,我们的策略是不断地渗透,今天一个方法,明天一个文件,然后是一个目录,最后是一个项目。我们需要激励源,画图如果让同事看到,会让你有成就感,有了炫耀的资本,这样会更激发自己的战斗欲,这就像是好学生因为老师的表扬,会更加拼命学习,为的就是保持这个好学生的身份。原创 2024-04-01 10:08:57 · 596 阅读 · 0 评论 -
Effective C++
明智而审慎地使用 private 继承(private 继承意味着 is-implemented-in-terms-of(根据某物实现出),尽可能使用复合,当 derived class 需要访问 protected base class 的成员,或需要重新定义继承而来的时候 virtual 函数,或需要 empty base 最优化时,才使用 private 继承)通过复合塑模 has-a(有一个)或 “根据某物实现出”(在应用域(application domain),复合意味 has-a(有一个);原创 2024-03-25 15:07:07 · 456 阅读 · 0 评论 -
C++从遗忘到入门
int* p;// 经典C++风格,只在强调 p是一个整形指针类型(int*)// 集团推荐的风格,指针、引用都是居中,两边留空格int * p;// 指针int & a = xx;// 左值引用int && a = xx;// 右值引用不论指针的类型是什么,指针本身的内存占用是相同的,64位系统占用8个字节。指针类型存储的是地址编号,本质上是整形,可以进行计算,但对地址的乘除法是没有意义的,加减法是有意义的,表示地址的偏移。p = p + 1;转载 2024-03-25 12:45:11 · 23 阅读 · 0 评论 -
温故知新 | C 语言最全入门笔记!
要区分。转载 2024-03-18 13:08:15 · 33 阅读 · 0 评论 -
C++代码性能优化的好处与缺点?有哪些编译器优化选项?
(5) 【技术】Linux中编译C++代码的g++工具,以及g++的常用操作指令-腾讯云开发者社区-腾讯云. https://cloud.tencent.com/developer/article/1936144.在C++编译过程中,`g++`的`-O1`和`-O2`选项是用来控制编译器优化的级别。(6) gcc/g++ -O 优化选项说明 - 不止所见 - 博客园. https://www.cnblogs.com/klcf0220/p/11244203.html.不同的编译器可能支持不同的优化选项集合。原创 2024-03-14 17:00:28 · 843 阅读 · 0 评论 -
c++11新特性,所有知识点都在这了!
/ 100ms// 100s// c++14里可以这么使用,这里只是举个自定义字面量使用的例子关于自定义字面量,可以看下chrono的源代码,相信大家会有很大收获,需要源码分析chrono的话,可以留言给我。理论上计算机对于任何变量的访问都可以从任意位置开始,然而实际上系统会对这些变量的存放地址有限制,通常将变量首地址设为某个数N的倍数,这就是内存对齐。转载 2024-03-14 13:22:09 · 24 阅读 · 0 评论 -
黑板战争 - 安全柜和智能锁
【代码】黑板战争 - 安全柜和智能锁。翻译 2024-03-05 09:23:27 · 33 阅读 · 0 评论 -
在 GitHub 上下载了一个 C++ 工程,并且该工程包含了 CMakeLists.txt 文件,该如何编译这个工程呢?
是你工程中生成的可执行文件的名称。根据你的工程,你需要替换它为实际的可执行文件名。如果你在 GitHub 上下载了一个 C++ 工程,并且该工程包含了。请注意,上述步骤中的。原创 2024-02-28 13:51:31 · 612 阅读 · 0 评论 -
c++ 基于范围的for循环详解
(Range-based for loop),用于遍历容器和数组。如果确认不会修改引用对象,请在前面加上const限定符。帮助编译器生成更加高效的代码。在for循环中基于复杂对象我们使用引用,这样可以避免对象拷贝,提升性能。下面的示例展示了如何使用基于范围的for循环遍历之前定义的。C++11引入了一种更简洁、统一的循环结构——如果是基础类型,直接使用值即可。程序执行结果为:C++11!程序执行结果为:C++11。原创 2024-02-28 11:31:56 · 1129 阅读 · 0 评论 -
常见面试题——说说堆内存与栈内存的区别
在C++中,(heap)和(stack)是两种不同的内存分配方式,它们在存储数据、生命周期和访问方式上有很大的区别。new。原创 2024-02-28 11:11:52 · 400 阅读 · 0 评论 -
c++11新特性,所有知识点都在这了!
/ 100ms// 100s// c++14里可以这么使用,这里只是举个自定义字面量使用的例子关于自定义字面量,可以看下chrono的源代码,相信大家会有很大收获,需要源码分析chrono的话,可以留言给我。理论上计算机对于任何变量的访问都可以从任意位置开始,然而实际上系统会对这些变量的存放地址有限制,通常将变量首地址设为某个数N的倍数,这就是内存对齐。转载 2024-02-28 10:55:57 · 24 阅读 · 0 评论 -
输出一段代码的运行时间间隔(C++ 11中的std::chrono库)
当我们需要测量代码执行的时间间隔时,我们可以使用C++ 11中的。,因为它创建了一个大小为n的向量来存储随机整数。,因为它测量了sort()函数的执行时间。,sort()函数的时间复杂度为。,其中n是向量中的元素数量。原创 2024-02-27 14:37:57 · 295 阅读 · 0 评论 -
std::mutex
如果在规定的等待时间内成功获取锁,就会增加计数器的值。否则,线程会继续执行而不会被阻塞。和其变体是 C++ 中用于线程同步的重要工具。是一种带有超时功能的互斥量,用于多线程编程。在上面的示例中,我们使用 try_lock_for()原创 2024-02-27 14:27:07 · 238 阅读 · 0 评论 -
c++ 智能指针 std::unique_ptr 用法
是 C++11 引入的智能指针之一,用于管理动态分配的对象。让我们深入了解一下它的作用和使用案例。原创 2024-02-27 13:57:43 · 436 阅读 · 0 评论 -
c++中使用lambda表达式的作用和用法
lambda表达式的使用场景有很多,作为小型函数对象,例如在需要一个简单的函数对象时,可以使用lambda表达式来定义一个匿名的函数对象,而不需要定义一个单独的类或结构体。lambda表达式与普通函数类似,也有参数列表、返回值类型和函数体,只是它的定义方式更简洁,并且可以在函数内部定义。作为临时计算,例如在需要一个简单的计算结果时,可以使用lambda表达式来封装计算逻辑,而不需要定义一个单独的函数。作为回调函数,例如在STL的算法中,可以使用lambda表达式来自定义比较函数、谓词函数、操作函数等。原创 2024-02-27 10:02:31 · 970 阅读 · 0 评论 -
右值引用,移动语义
这是C++11引入的一项新功能,它可以让我们在不需要拷贝数据的情况下,将一个对象的资源(如内存,文件,网络连接等)转移给另一个对象,从而提高程序的性能和效率。移动赋值运算符**,它们的参数是右值引用,它们的作用是将参数对象的资源转移给当前对象,并将参数对象置为空或无效状态,以避免资源的重复释放。拷贝赋值运算符**,它们的参数是常量左值引用,它们的作用是将参数对象的数据复制给当前对象,并保持参数对象不变,以避免数据的不一致。,将一个对象的数据复制给另一个对象,从而保证两个对象是完全独立的,互不影响。原创 2024-02-26 17:47:54 · 385 阅读 · 0 评论 -
c++ decltype
这是C++98就有的一个运算符,它可以返回一个表达式或者一个类型的std::type_info对象的引用,该对象包含了类型的名称和其他信息。typeid的用法是在一个表达式或者一个类型前加上typeid运算符,例如typeid(x)或者typeid(int),它会返回一个std::type_info对象的引用。typeid的结果可以用name()成员函数来获取类型的名称,但是这个名称是由编译器实现定义的,不一定是可读的或者一致的。typeof也不是C++标准的一部分,所以不建议在可移植的代码中使用它。原创 2024-02-26 17:30:26 · 1153 阅读 · 0 评论 -
了解c++智能指针的使用案例和场景
c++智能指针是一种封装了原始指针的类对象,可以实现自动管理内存的功能,避免手动new和delete造成的内存泄漏或重复释放等问题。原创 2024-02-19 15:57:13 · 251 阅读 · 0 评论 -
c++ 一文彻底搞懂闭包
(3) 闭包是什么, C++和Rust的视角 - 知乎 - 知乎专栏. https://zhuanlan.zhihu.com/p/378270921.(6) 闭包是什么, C++和Rust的视角 - 知乎 - 知乎专栏. https://zhuanlan.zhihu.com/p/378270921.(4) C++的闭包(closure) - 知乎 - 知乎专栏. https://zhuanlan.zhihu.com/p/121628510.闭包可以用来实现高阶函数,比如回调函数、函数式编程等¹²。原创 2024-02-19 15:21:12 · 483 阅读 · 0 评论 -
c++ 中在构造函数中赋值和使用初始化列表有什么区别?
如果我们有一个类成员,它本身是一个类或者是一个结构,而且这个成员它只有一个带参数的构造函数,而没有默认的构造函数,这时要对其进行初始化,就必须调用这个类成员的带参数的构造函数,如果没有初始化列表,就无法完成。当类成员中含有一个const对象时,或者一个引用时,必须经过成员初始化列表进行初始化,因为const对象或者引用在声明的同时必须初始化,而在构造函数中,做的是对它们的赋值,并不是初始化。初始化列表是在对象创建时直接初始化成员变量,而构造函数中的赋值是在对象创建后对已经初始化的成员变量进行赋值。原创 2024-02-02 11:24:50 · 513 阅读 · 0 评论 -
error: use of deleted function ‘std::atomic<int>::atomic(const std::atomic<int>&) 防止原子类型被意外复制
编译错误是因为你使用了被删除的拷贝构造函数`std::atomic::atomic(const std::atomic&)`,它用来防止原子类型被意外复制。`,它们不会调用拷贝构造函数,而是调用其他的构造函数,如`constexpr atomic(__integral_type __i) noexcept`。这样就可以解决你的错误,让你的程序正常编译和运行。这就会调用被删除的拷贝构造函数,导致错误。上面代码中,你使用了拷贝初始化的语法`可以使用直接初始化的语法``或者列表初始化的语法`原创 2024-01-26 14:28:46 · 662 阅读 · 0 评论 -
浅谈可重入函数与不可重入函数
所谓可重入是指一个可以被多个任务调用的过程,任务在调用时不必担心数据是否会出错。一个可重入的函数简单来说就是可以被中断的函数,也就是说,可以在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代码,而返回控制时不会出现什么错误;而不可重入的函数由于使用了一些系统资源,比如全局变量区,中断向量表等,所以它如果被中断的话,可能会出现问题,这类函数是不能运行在多任务环境下的。也可以这样理解,重入即表示重复进入首先它意味着这个函数可以被中断,其次意味着它除了使用自己栈上的变量以外。转载 2024-01-26 09:26:23 · 28 阅读 · 0 评论 -
无锁编程基础
背景我们处在技术快速发展的时代,竞争变得前所未有的激烈,不仅要十八般武艺俱全,还得选对正确的技术,跟上发展的脚步,并贴上精研某个专业方向的标签。我们不仅要面对多线程和并发,还要考虑多核时代的并行计算,无锁编程或许是一种选择,可能会提升性能,也可能避免锁的使用引起的错误,同时会带来编程习惯的变革。不可否认,无锁技术是目前各种并发解决方案中比较受争议的一种,尽管它基于最基本的编程技术,不依赖于任何语言和平台,但是这项技术有些诡异,掌握起来颇有难度,有点曲高和寡,所以没有大面积应用在编程中。技术本身转载 2020-07-07 20:16:41 · 418 阅读 · 0 评论 -
protobuf repeated数组类型的使用
http://www.cppblog.com/API/archive/2014/12/09/209070.aspxprotobuf是Google开发的一个序列化框架,类似XML,JSON,基于二进制,比传统的XML表示同样一段内容要短小得多。通过protobuf,可以很轻松的调用相关方法来完成业务数据的序列化与反序列化。protobuf repeated类型相当于std的vector,可以用来...转载 2020-03-03 16:37:28 · 12622 阅读 · 0 评论 -
二分查找法和使用二分法查找的注意事项
使用二分法查找的必要条件:1、数组有序2、注意数据类型是有范围的,不要溢出。3、采用L+(R-L)/2表达式更合适4、注意:start = mid +1 和 end=mid -1,防止死循环5、数据量不可过大1024个人,有一个人有艾滋病。需要血液检测。如何快速找出这个人。所有人血液都采取过来。把512个人血液混合起来512 512 1次淘汰512个人...翻译 2018-11-28 14:29:32 · 2306 阅读 · 0 评论 -
c++string字符串比较相等
#include <iostream>#include <string>#include <stdio.h>using namespace std;int main(){ std::string h2 = "BUS_0001"; std::string h3 = "BUS_0001"; printf(" h3 == h2:...原创 2020-04-02 18:16:03 · 2433 阅读 · 0 评论 -
智能指针make_unique 与make_shared 的知识介绍
关于make_unique的构造及使用例程,MSDN的讲解非常详细 (https://msdn.microsoft.com/zh-cn/library/dn439780.aspx)使用过程中,主要有这么几个关键点:1. make_unique 同unique_ptr 、auto_ptr等一样,都是smart pointer,可以取代new 并且无需 delete pointer,有助于代码管理。2.make_unique创建并返回 unique_ptr至指定类型的对象,这一点从其...转载 2020-11-30 14:54:04 · 34674 阅读 · 0 评论 -
C++基础知识面试必备、复习细节
https://www.cnblogs.com/lanxuezaipiao/p/4127904.html这是我之前准备找工作时看《C/C++求职宝典》一书做的笔记,都是一些笔试面试中常考的重点难点问题,但比较基础,适合初学者看。1. char c = '\72'; 中的\72代表一个字符,72是八进制数,代表ASCII码字符“:”。2. 10*a++ 中a先进行乘法运算再自增(笔试中经...转载 2018-09-05 14:40:42 · 186 阅读 · 0 评论 -
上海西井科技面试
以下的问题是总结的我没回答上来或者回答的不好的小结,回答上来的被我省去了。一个面试官面试了一个半小时,感觉这个面试官很nice,知识面比我广和深。踩了那么多雷,估计是没戏了!各位看官,工作不好找,且好好珍惜当下的工作,记住:今天不努力工作,明天努力找工作!1、为什么构造函数不能是虚函数?关于C++为什么不支持虚拟构造函数,Bjarne很早以前就在C++Style and Techn...原创 2019-06-12 17:18:42 · 2525 阅读 · 1 评论 -
c++的四种强制类型转换:static_cast dynamic_cast const_cast reinterpret_cast
dynamic_cast主要用于“安全地向下转型dynamic_cast用于类继承层次间的指针或引用转换。主要还是用于执行“安全的向下转型(safe downcasting)”,也即是基类对象的指针或引用转换为同一继承层次的其他指针或引用。至于“向上转型”(即派生类指针或引用类型转换为其基类类型),本身就是安全的,尽管可以使用dynamic_cast进行转换,但这是没必要的, 普通的转换已...原创 2019-03-19 09:35:24 · 904 阅读 · 0 评论 -
爱德万C++笔试题
#include <iostream>using namespace std;class Base{ public: virtual void f(float x){cout<<"Base::f(float)"<<x<<endl;} void g(float x){cout<<"Base::g"<<x<<...原创 2019-10-26 21:25:39 · 997 阅读 · 1 评论 -
爱德万题目
shared_ptr指针的循环引用问题weak_ptr 指针的使用?lockgurad的使用单例模式的线程安全问题try块中,内存分配时出错了怎么办。一个数组 int arr[]={1,2,-5,3,-4,8,9,2,5,-4,2,5,-8},求出数组中的最大子数组...原创 2020-03-14 21:31:36 · 470 阅读 · 0 评论 -
STL中vector的使用
作用:它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。vector在C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。特别注意:使用vector需要注意以下几点:1、如果你要表示的向量长度较长(需要为向量内部保存很多数),容易导致内存泄漏,而且效率会很低;2、Vec...转载 2018-12-26 14:11:51 · 336 阅读 · 0 评论 -
输入一个链表,输出该链表中倒数第k个结点。
输入一个链表,输出该链表中倒数第k个结点。思路1:一次循环得到节点的个数,然后使用节点的个数减去倒数的k,就得到了正数的第count-k个,返回这个节点就可以了。/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class...原创 2019-11-04 09:11:30 · 268 阅读 · 0 评论 -
std::vector, std::unordered_map, and std::unordered_set.
Recently I’ve seen a couple of examples of bad choses when it comes to what containers to use in the code, so I thought I’d share my view of some containers.When you need an associative container...转载 2019-04-08 09:31:08 · 252 阅读 · 0 评论 -
STL标准模板库
函数模板的定义与使用函数家族、语法形式、类型参数、typename、实例化、二次编译、包含模型。函数模板包含两种参数,一种是模板参数,即在模板名之前,用一对尖括号括起来的参数;另一种是调用参数,在模板名之前,用一对圆括号括起来的参数如果函数模板调用参数的类型相关于该模板时,即使不显式指定模板参数,编译器也有能力根据参数的类型隐式推断出正确的模板参数,来获得与普通函数调用相同的语法表...转载 2018-10-23 10:33:04 · 248 阅读 · 0 评论 -
直接插入排序算法实现学习
#include <iostream>using namespace std;void show(int *a,int n){ for(int i=0;i<n;i++) { cout<<a[i]<<"\t"; } cout<<endl;}void InsertSort(int *k,...原创 2018-11-27 11:14:02 · 164 阅读 · 0 评论 -
常量指针与指针常量,函数指针与指针函数
1、常量指针:本质是一个指针,表示一个指向常量的指针const int * p;//能够改变指针的指向,但不能改变指针所指对象的值int a=0,b=1;const int *p = &a;*p = b;//编译出错p = &b;//okintconst * p; //同上2、指针常量:本质是一个常量,表示一个指针是常量int * const...转载 2019-10-21 14:23:55 · 435 阅读 · 0 评论 -
蛇形数组编程题
偏移量向右(x,y+1) (0,1) 0向下(x+1,y) (1,0) 1向左(x,y-1) (0,-1) 2向上(x-1,y) (-1,0)...翻译 2019-06-27 10:21:26 · 307 阅读 · 0 评论