![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
惜朝_
这个作者很懒,什么都没留下…
展开
-
重载new / delete 操作符
静态存储区创建动态对象#include <iostream>#include <string>using namespace std;class Test{ static const int count = 4; static char m_buffer[]; static char m_map[]; int m_value;public: void*原创 2017-07-04 18:22:28 · 299 阅读 · 0 评论 -
C++异常类
c++异常类Exception,接口类ArithmeticException类, 计算异常NullPointerException类,空指针异常IndexOutOfBoundsException类,越界异常NoEnoughtMemoryException,内存不足异常InvalidParameterException,参数错误异常//Exception.h#define T...原创 2018-05-01 09:20:01 · 778 阅读 · 0 评论 -
面向对象模型分析(继承,多态)
class是一种特殊的struct 在内存中 class 依旧可以看做变量的集合class 中的成员函数和成员变量是分开存放的 每个对象有独立的成员变量所有对象共享类中的成员函数#include <iostream>#include <string>using namespace std;class A{ int i; int...原创 2018-04-13 14:17:25 · 137 阅读 · 0 评论 -
读Linux内核kfifo
内核kfifo简约高效,匠心独运,有一下特点:保证缓冲区大小为2的次幂,不是的向上取整为2的次幂。使用无符号整数保存输入(in)和输出(out)的位置,在输入输出时不对in和out的值进行模运算,而让其自然溢出,并能够保证in-out的结果为缓冲区中已存放的数据长度。将需要取模的运算用 & 操作代替( a % size = (a & (size − 1)) ), 这需...原创 2018-04-12 09:25:32 · 1077 阅读 · 0 评论 -
shared_ptr实现copy-on-write
最近再看陈硕的《Linux多线程服务端编程使用muduoC++网络库》,2.8节看到这个内容:使用shared_ptr实现copy-on-write的手法降低锁竞争。目的: 利用普通mutex替换读写锁shared_ptr是引用技术型智能指针,当只有一个观察者时,引用计数为1。对于write端,如果发现引用计数为1(即当前只有自己持有智能指针),那可以加锁后安全的修改。如果大于1,则需...原创 2018-04-10 19:21:05 · 489 阅读 · 0 评论 -
4. 函数参数的默认值
c++中可以在函数==声明==的时候为参数提供一个默认值当函数调用时没有提供参数的值,则使用默认值 参数的默认值必须在函数的声明中指定(在定义处指定 编译报错)#include <stdio.h>int mul(int x = 0);int main(int argc, char *argv[]){ printf("%d\n", mul()); ...原创 2018-03-22 08:39:59 · 354 阅读 · 0 评论 -
3. 内联函数
c++中推荐使用内联函数替代宏代码片段c++中使用inline关键字声明内联函数内联函数声明时,==inline关键字必须和函数定义结合在一起==,否则编译器直接忽略内联请求。c++编译器直接将内联函数体插入调用的地方,所以他没有普通函数调用事的额外开销(压栈,跳转,返回)内联函数会进行参数检查,返回类型等函数的内联请求可能会被拒绝现代c++编译器能够进行编译优化,一些函数即使没有...原创 2018-03-20 12:34:22 · 137 阅读 · 0 评论 -
2. 引用
引用可以看作一个已经定义变量的别名与原变量在同一片内存空间引用语法: type& name = var;int a = 4;int& b = a; //b为a的别名b = 5; //操作b就是操作a引用传递数组fun(int (&array)[10]); 普通引用在定义时必须用同类型变量进行初始化。...原创 2018-03-20 12:33:52 · 120 阅读 · 0 评论 -
1. c到c++的升级
变量定义c++所有变量都可以在需要使用时再定义,C语言所有变量都必须在作用域开始的位置定义register关键字register关键字请求编译器将局部变量存储在寄存器中c++中依旧支持register关键字(只是为了兼容C语言)c++编译器有自己的优化方法 C语言中无法取得register变量的地址c++中可以取得register变量的地址(对现代编译器registe...原创 2018-03-20 12:33:10 · 129 阅读 · 0 评论 -
9. c++中的const,引用和指针
const常量的判别标准只有用字面量初始化的const常量才会进入符号表使用其他变量初始化的const常量仍然是只读变量被volatie 修饰const常量不会进入符号表 在编译期间不能确定初始值的const标识符,都被作为只读变量处理 const引用的类型和初始化变量的类型相同:初始化成为只读变量不同:生成一个==新的==只读变量char c = 'c';...原创 2018-03-23 22:27:49 · 171 阅读 · 0 评论 -
8. c++ 的强制类型转换
c方式的强制类型转换存在的问题 过于粗暴 任意之间都可以进行转换,编译器很难判断其正确性难于定位 - 在源码中无法快速定位所有使用强制类型转换的语句c++的强制类型转换分为四种 static_castconst_castdynamic_castreinterpret_cast 用法: xxx_cast(Expression) static_c...原创 2018-03-23 22:26:56 · 198 阅读 · 0 评论 -
7. 动态内存分配和命名空间
c++中的动态内存分配c++中通过new关键字进行动态内存申请c++中的动态内存申请是基于类型的delete关键字用于内存释放变量申请Type* pointer = new Type;delete pointer;数组申请Type* pointer = new Type[N];delete[] pointer;动态内存分配示例#include &l...原创 2018-03-23 22:24:13 · 188 阅读 · 0 评论 -
6. c++和c的相互调用
c++ 编译器能够兼容C语言的编译方式c++ 编译器会优先使用c++编译的方式extern关键字会强制让c++编译器进行c方式的编译extern "C"{#include "c.h" //c方式编译出来的c.c 调用c.c中的f();}int main(void){ f(); return 0;}为了保证一段c代码只会以c的方式编译(上面...原创 2018-03-23 22:23:46 · 148 阅读 · 0 评论 -
5. 函数重载
函数重载函数重载至少满足下面的一个条件 参数个数不同参数类型不同参数顺序不同函数默认参数遇上函数重载的问题#include <stdio.h>int func(int a, int b, int c = 0){ return a * b * c;}int func(int a, int b){ return a + b;}in...原创 2018-03-23 22:23:05 · 169 阅读 · 0 评论 -
关于Cmake 链接静态库出现undefined reference to错误
在编写一个C++项目的时候,使用cmake管理工程,成功链接一个静态库,但是在编译时仍然出现undefined reference to 的错误。 最终发现问题是由于c和c++混编导致的。解决方案: 由于我链接的库是使用c语言编写,所以需要在include头文件时加上#ifdef __cplusplusextern "C"{#endif#include "XXX.h"...原创 2018-05-06 21:07:20 · 23620 阅读 · 1 评论