![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
jalen_zh
目前就职于国内某互联网大厂,后端开发工程师一枚,感谢关注,交流可以私信哦
展开
-
C++中常见的异常
1.C++具有完善的异常捕获机制,采用try{} catch(){}机制,这是C语言无法比拟的2.常见的几种异常:bad_alloc: 请求分配内存失败, operator new 或者 operator new []bad_exception: 函数异常,通常是函数运行错误,抛出的异常bad_typeid: 类型异常,通常用typeid操作符,作原创 2017-03-28 20:59:49 · 1529 阅读 · 0 评论 -
Linux下clang/gcc使用pthread.h编译出错undefined reference to `pthread_create'
最近看Unix环境高级编程,关于多线程编程的部分,按照书上的代码敲了一下,编译出错undefined reference to `pthread_create';Google了一下,是链接的时候出错,需要加参数clang test.c -o test -lpthread或者g++ test.c -o test -lpthread具体代码如下#include原创 2017-08-18 18:36:49 · 2664 阅读 · 0 评论 -
CMake语法基础入门
前言:”作为一个做C++开发的工程师如果不会cmake,听起来就会让人怀疑“,来自mentor。这个星期一直在做公司C/C++ SDK的一个feature的改进,前前后后换了好几次方案,最后经过和mentor谈论商量,最终决定采用Amazon的做法,于是乎开始了搬砖,不停的coding and 修bug,昨天上午基本上完成了这个feature,下午和mentor开始对整个SDK进行编译,测试。一段原创 2017-08-04 16:04:03 · 316 阅读 · 0 评论 -
C++之std::atmoic、std::pair、enum class
今天看别人的源码,发现C++里面的有些东西之前都没接触过,记录下来1、std::atmoicatmoic是应该模板类是C++11新出的应该新特性用来保证线程安全。保证对象是应该原子操作,即每次只能有一个线程对对象进行操作,用来保证数据安全2、std::pairstd::pairstd::pair p;p.first=1;p.second=2;std::cout<<p.fi原创 2017-09-04 17:46:41 · 735 阅读 · 0 评论 -
C++对象模型之内存布局一
如果想学习在linux或者在linux平台下开发,学习C/或C++是非常好的选择.俗话说,术业有专攻,学一门技术,就尽量学得深,也可以作为行走江湖,混口饭吃的一项本领.对于C,当初我是看了C与指针这门书,这本书讲解了很多我没有了解过的知识点,特别是指针讲解的很到位.最后还设计了C运行时内存模型.对于C++的学习,我看了C++ Primer之后,进阶的书为深入理解C++对象模型,这本转载 2017-09-07 10:35:00 · 318 阅读 · 0 评论 -
CMake 进阶篇
include_directories(${variable})添加头文件的搜索路径target_include_directories(A PRIVATE ${Boost_INCLUDE_DIRS})如果您只使用源文件(.cpp)或专用头文件(.h)中的Boost头。target_include_directories(A INTERFACE ${Boost_INCLUDE_DI原创 2017-08-29 17:49:40 · 2041 阅读 · 0 评论 -
STL源码剖析之vector
C++标准模板库在日程编程应用非常的广泛,之前看到一篇大牛文章说,用C++开发,尽量用容器类+迭代器来代替数组+指针,因为数组+指针容易越界,或者内存泄露,相反,容器类和+迭代器都有国外大神将底层封装好,使用安全简单。而且标准模板库再一定程度上可以提高我们编程效率,假如要对一个结构体数组排序,写一个比较函数或者仿函数,调用sort函数即可。换做是c语言,还需自己写排序函数。。。vector是有转载 2017-08-29 17:52:55 · 435 阅读 · 0 评论 -
CMake 编译支持GDB调试
一般在调用./configure时,可以通过设置CXXFLAGS或者CFLAGS使程序可以支持调试,就是可以用GDB查看程序运行的信息,但在cmake编译时,在cmake过程和后面的make及make install都无法加入调试信息。当然可以加入调试信息的,方法如下:修改CMakeLists.txt文件,如我修改如下:# Version 2.4 mig转载 2017-08-30 10:47:27 · 923 阅读 · 0 评论 -
C++多线程编程:线程同步
前言多线程编程必须要考虑线程同步问题。线程同步就是,当多个线程共享一个内存的时候,为了保证他们都有一致的数据视图。如果每个线程使用的变量都是其他线程不会读取和修改的,那么就不存在一致性问题。同样的,如果变量是只读的,多个线程同时读取该变量也不会有一致性问题;但是,当一个线程可以修改的变量,其他线程可以读取或者修改的时候,我们就需要对这些线程进行同步,确保它们在访问变量的存储内容的时候不会访问到...原创 2017-08-31 15:38:55 · 693 阅读 · 0 评论 -
C++对象模型之内存布局三
经过两天的摸索,今天终于搞清楚C++对象模型.前两篇已经讲解了单继承,多重继承和多继承的对象模型.今天讲解菱形继承,虽然过程艰难,但是收获丰富.简单虚继承对象模型首先编写如下的测试程序:12345678910111213141516171819202122232425262728293031323334353637383940414243444546转载 2017-08-11 17:31:35 · 304 阅读 · 0 评论 -
C++对象模型之内存布局三(虚继承)
经过两天的摸索,今天终于搞清楚C++对象模型.前两篇已经讲解了单继承,多重继承和多继承的对象模型.今天讲解菱形继承,虽然过程艰难,但是收获丰富.简单虚继承对象模型首先编写如下的测试程序:12345678910111213141516171819202122232425262728293031323334353637383940414243444546#i转载 2017-09-18 15:20:10 · 505 阅读 · 0 评论 -
C/C++:随机数生成
C/C++中生成随机数可以使用标准库函数rand()来生成。1、对生成的随机数的范围不限制代码如下#include#includeint main(){ printf("%d/n",rand());}2、对生成的随机数的范围有限制比如在1000以内#include#includeint main(){ print原创 2017-09-08 17:15:22 · 543 阅读 · 0 评论 -
extern “C” #ifndef #ifdef #undef #pragma once
最近做CPP相关的东西,然后对CPP项目里面遇到的问题进行一个summary,主要的问题,title里大概表明了,在接下来的blog里面主要是讲一下这些东西的一些用法和应用场景等。算是对学习的一个总结吧。1、extern “C”和extern这两个东西的用法和作用是完全不一样的。extern “C”是C++代码调用C的代码,作用就是告诉编译器按照C的方式编译,我们都知道C+原创 2017-08-18 12:27:30 · 509 阅读 · 0 评论 -
C++const对象 常量数据 常量成员函数 const指针 const引用
前言:const关键字在C语言里面的作用好像并不大,顶多算个“跑龙套”?但是这个const到了C++里面,可谓是有着不可撼动的地位,关于const在C++里是如何有着不可撼动的地位,接下来我将会进行详细介绍。原创 2017-08-10 18:24:35 · 928 阅读 · 0 评论 -
c++ complier errors:passed arguments, but takes just
最近在Linux环境下编译一个C++项目,遇到了一个很奇怪的错误“:passed arguments, but takes just”,之前也从来没有遇到过这种error,google了一下,综合了一下原因,“宏定义冲突”,因为这个项目里面参加AWS的做法,将所有的宏函数放到了同一个头文件里面,然后不同的头文件又不断的include,于是检查各级的头文件,但是没有发现错误;看了一下stack ov原创 2017-08-17 15:14:33 · 4515 阅读 · 0 评论 -
struct{char data[0]}柔性数组
柔性数组* 柔性数组即数组大小待定的数组 * C语言中结构体的最后一个元素可以是大小未知的数组 * C语言中可以由结构体产生柔性数组#include #include typedef struct _soft_array{ int len; int array[];}SoftArray;int main(){转载 2017-03-29 17:43:16 · 480 阅读 · 0 评论 -
C++中static和const的作用小结
static关键字至少有下列n个作用: (1)函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值; (2)在模块内的static全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问; (3)在模块内的static函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明它的模块内;原创 2017-03-30 16:44:29 · 375 阅读 · 0 评论 -
vetcor的实现原理
vector的数据安排以及操作方式,与array非常相似。两者的唯一区别在于空间的运用的灵活性。array是静态空间,一旦配置了就不能改变;要换个大(或小)一点的房子,可以,一切琐细都得由客户端自己来:首先配置一块新空间,然后将元素从旧址一一搬往新址,再把原来的空间释还给系统。vector是动态空间,随着元素的加入,它的内部机制会自行扩充空间以容纳新元素。因此,vector的运用对于内存的合理利用原创 2017-04-01 21:09:46 · 861 阅读 · 0 评论 -
vector对象一边遍历一边删除元素
今天做携程的笔试题,附加编程题是删除一行字符串里面的标点符号,关于一边遍历一边删除的问题,坑踩到好几次了,真是好气啊,明明很简单的问题,写下来防止自己忘了自己忘了else的条件了,结果最后老不出结果,一调试发现死循环了,真的好气啊bool f(vector &str) { int end = str.size(); bool state = false; auto it = str.原创 2017-04-11 21:43:35 · 1678 阅读 · 0 评论 -
多线程编程需要注意的问题
1、线程的优先级多线程编程中要注意协调好各个线程的优先级。一般来说,控制线程的优先级要高于Worker线程。这样做,可以保证Client(最终用户或者其他模块)尽快得到响应。当控制线程是与最终用户交互的界面线程时更应如此,如果界面线程优先级较低,界面可能较长时间没有反应,用户很可能会怀疑命令是不是还没有开始执行多线程编程中要注意协调好各个线程的优先级。一般来说,原创 2017-05-21 15:26:15 · 3308 阅读 · 0 评论 -
C++11多线程编程之初步介绍
前言:我认为作为一名C++程序员掌握多线程编程还是很有好处的,在C++11出来之后,有一个std::thread库可以供我们使用,来编写多线程程序与C11++多线程相关的头文件C++11新标准一共提供了五个标准库来支持多线程编程,分别是,,,and :主要声明了std::thread类 :主要声明了两个类,std::atomic和std::atomic_flag原创 2017-07-12 11:54:13 · 610 阅读 · 0 评论 -
C++编译过程
了解编译过程的益处c++工程相关的问题什么是库?静态库和动态库又有什么区别?头文件起什么作用?编译过程简介名词:编译:把源文件中的源代码翻译成机器语言,保存到目标文件中。如果编译通过,就会把CPP转换成OBJ文件。编译单元:每个cpp就是一个编译单元,每个编译单元相互之间是独立且相互不知的。一个编译单元(Translation Unit)是指一个.c转载 2017-06-12 13:33:40 · 253 阅读 · 0 评论 -
C/C++校招面试常考问题
1、虚函数实现机制?一个virtual函数的类具有一个虚函数表,且该类的每一个对象都有一个虚指针,指向该类的虚函数表。运行的时候,通过对象自己的虚指针来索引正确的虚函数来执行。若基类中虚函数的返回类型为基类型的指针或者引用,则派生类中override这个虚函数的时候需要将返回类型改为派生类类型的引用或者指针。2、有了malloc/free为什么还要new/delete?malloc/f原创 2017-03-06 19:39:40 · 4627 阅读 · 0 评论 -
C++虚函数表解析
//转载大牛的,这篇文章对virtual table机制讲的很详细透彻,唯一的小瑕疵就是对重载、覆盖好像好像用的不是很准确,在文章里,我都已经修订正确了前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了转载 2017-08-09 12:18:36 · 344 阅读 · 0 评论 -
STL源码剖析之map和set
之前分析二叉搜索树和平衡二叉树时,真心感觉树的实现真是难,特别是平衡二叉树,不平衡之后需要调整,还要考虑各种情况,累感不爱.今天看到这个红黑树,发现比平衡二叉树还难,但是红黑树比平衡二叉树使用的场景更多,所以平常使用时,我们需要了解红黑树的实现原理,如果有能力,可以自己实现,但是如果实在做不出来,也没关系,因为STL和linux内核都有现成的红黑树实现,拿来用即可,前提是了解红黑树原理.红黑树...转载 2018-07-21 14:22:52 · 1335 阅读 · 0 评论