随笔分类 -  C/C++

摘要:宏字符串拼接 阅读全文
posted @ 2020-06-23 19:32 happyyoung 阅读(1845) 评论(0) 推荐(0)
摘要:编译速度 阅读全文
posted @ 2020-06-17 16:35 happyyoung 阅读(217) 评论(0) 推荐(0)
摘要:enum class 阅读全文
posted @ 2020-06-17 14:07 happyyoung 阅读(307) 评论(0) 推荐(0)
摘要:函数默认参数 阅读全文
posted @ 2020-05-03 09:10 happyyoung 阅读(578) 评论(0) 推荐(0)
摘要:检查文件是否存在 阅读全文
posted @ 2020-05-01 12:02 happyyoung 阅读(566) 评论(0) 推荐(0)
摘要:default delete 阅读全文
posted @ 2020-04-28 16:13 happyyoung 阅读(336) 评论(0) 推荐(0)
摘要:volatile 阅读全文
posted @ 2020-04-26 11:21 happyyoung 阅读(112) 评论(0) 推荐(0)
摘要:1)final类不能被继承。 2)final虚函数不能被重写。 class A { public: virtual void foo() {} }; class B: public A { public: void foo() final {} }; class C final: public B 阅读全文
posted @ 2020-03-17 21:14 happyyoung 阅读(127) 评论(0) 推荐(0)
摘要:1、如果构造函数是虚函数,则它需要通过类的虚表来调用,而虚表的指针保存在对象中,没有调用构造函数,就没有对象。 阅读全文
posted @ 2020-03-16 20:26 happyyoung 阅读(1250) 评论(0) 推荐(2)
摘要:迭代器,通常指的是STL中容器的指针封装,用于指向容器中的元素。 1、序列容器 1)内存连续,如vector。 删除(erase)一个元素,会导致其后面的元素都向前移动,则对应的迭代器都会失效。 尾部添加(push_back)一个元素,如果引起内存重新分配,则迭代器全部失效。 2)内存不连续,如li 阅读全文
posted @ 2020-03-16 19:17 happyyoung 阅读(192) 评论(0) 推荐(0)
摘要:虚析构函数是为了解决基类指针指向派生类对象,并用基类指针delete派生类对象,导致的内存泄漏问题。 class Base { public: Base(){ a = 1; } // 1) virtual ~Base() { cout << "destruct base." << endl; } / 阅读全文
posted @ 2020-03-05 22:06 happyyoung 阅读(582) 评论(0) 推荐(0)
摘要:1、函数指针,用于保存函数的入口地址,即函数名。 // 函数指针的基本用法 // 声明一个函数 int func(int); // 写法1 // 定义一个函数指针 int (*fptr)(int); // 形式上只比函数多了一个*号和一对圆括号 // 写法2 // 声明一个函数指针类型 typede 阅读全文
posted @ 2020-03-05 22:03 happyyoung 阅读(1134) 评论(0) 推荐(0)
摘要:在使用基本指针类型时,因为要手动释放指针指向的内存,常常容易造成内存泄漏,特别是异常分支很多的情况下。而智能指针类型就是将基本指针类型封装成模板类,以便更好地管理内存。 智能指针都包含一个explicit构造函数,因此基本指针类型不能隐式转换成智能指针,需要显式调用。 shared_ptr<doub 阅读全文
posted @ 2020-03-05 21:59 happyyoung 阅读(1341) 评论(1) 推荐(0)
摘要:Json::Value 阅读全文
posted @ 2020-02-24 11:12 happyyoung 阅读(179) 评论(0) 推荐(0)
摘要:作用域枚举 阅读全文
posted @ 2020-02-24 10:21 happyyoung 阅读(256) 评论(0) 推荐(0)
摘要:CMake是一个跨平台的自动化构建工具,使用CMakeLists.txt文件来描述构建过程,生成标准的构建文件,如UNIX下Makefile。 1、使用流程 1)编写CMakeLists.txt。 2)执行"cmake path"命令,其中path是CMakeLists.txt所在的目录。 3)在生 阅读全文
posted @ 2020-02-18 09:45 happyyoung 阅读(475) 评论(0) 推荐(0)
摘要:C++11中的11表示2011年的C++标准。 1、右值引用(rvalue reference)和移动(move)语义 1)作用:避免右值拷贝,而只是“移动”,减少拷贝开销。 2)右值:没有名字,不能取地址,不能修改。左值和右值没有严格的定义。 3)移动语义: 2、constexpr(常量表达式) 阅读全文
posted @ 2020-02-11 19:52 happyyoung 阅读(630) 评论(1) 推荐(0)
摘要:原子操作:任意时刻,最多只有一个线程能访问。 在C++11之前,通常使用pthread库进行多线程编程,需要创建锁,以及加解锁等操作来保证多线程对临界资源的原子操作。 // 模板类atomic<T> typedef atomic<int64_t> atomic_int64_t; 运算符重载 内存序( 阅读全文
posted @ 2020-02-11 17:25 happyyoung 阅读(592) 评论(0) 推荐(0)
摘要:C/C++程序分配的内存分为以下五种: 1、栈区(stack) 1)由系统自动分配并释放,存放函数形参和局部变量等,分配方式类似数据结构中的栈。 2)分配速度快。 2、堆区(heap) 1)由程序员分配并释放,分配方式类似数据结构中的链表(跟堆没关系)。 2)分配速度慢。 3、全局/静态区 1)存放 阅读全文
posted @ 2020-02-05 11:13 happyyoung 阅读(942) 评论(0) 推荐(0)
摘要:1、malloc:不初始化。 // 分配一块size字节大小的内存,并返回内存块起始位置的指针。 void* malloc (size_t size); 2、calloc:初始化为0。 // 分配一块内存,包含num个元素,每个元素size字节大小。 void* calloc (size_t num 阅读全文
posted @ 2020-02-04 20:49 happyyoung 阅读(879) 评论(0) 推荐(1)