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 · 435 阅读 · 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 · 263 阅读 · 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 · 241 阅读 · 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 · 283 阅读 · 0 评论 -
8. c++ 的强制类型转换
c方式的强制类型转换存在的问题 过于粗暴 任意之间都可以进行转换,编译器很难判断其正确性 难于定位 - 在源码中无法快速定位所有使用强制类型转换的语句 c++的强制类型转换分为四种 static_cast const_cast dynamic_cast reinterpret_cast 用法: xxx_cast(Expression) static_c...原创 2018-03-23 22:26:56 · 287 阅读 · 0 评论 -
9. c++中的const,引用和指针
const常量的判别标准 只有用字面量初始化的const常量才会进入符号表 使用其他变量初始化的const常量仍然是只读变量 被volatie 修饰const常量不会进入符号表 在编译期间不能确定初始值的const标识符,都被作为只读变量处理 const引用的类型和初始化变量的类型 相同:初始化成为只读变量 不同:生成一个==新的==只读变量 char c = 'c'; ...原创 2018-03-23 22:27:49 · 283 阅读 · 0 评论 -
1. c到c++的升级
变量定义 c++所有变量都可以在需要使用时再定义,C语言所有变量都必须在作用域开始的位置定义 register关键字 register关键字请求编译器将局部变量存储在寄存器中 c++中依旧支持register关键字(只是为了兼容C语言) c++编译器有自己的优化方法 C语言中无法取得register变量的地址 c++中可以取得register变量的地址(对现代编译器registe...原创 2018-03-20 12:33:10 · 218 阅读 · 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 · 219 阅读 · 0 评论 -
3. 内联函数
c++中推荐使用内联函数替代宏代码片段 c++中使用inline关键字声明内联函数 内联函数声明时,==inline关键字必须和函数定义结合在一起==,否则编译器直接忽略内联请求。 c++编译器直接将内联函数体插入调用的地方,所以他没有普通函数调用事的额外开销(压栈,跳转,返回) 内联函数会进行参数检查,返回类型等 函数的内联请求可能会被拒绝 现代c++编译器能够进行编译优化,一些函数即使没有...原创 2018-03-20 12:34:22 · 234 阅读 · 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 · 505 阅读 · 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 · 651 阅读 · 0 评论 -
读Linux内核kfifo
内核kfifo简约高效,匠心独运,有一下特点: 保证缓冲区大小为2的次幂,不是的向上取整为2的次幂。 使用无符号整数保存输入(in)和输出(out)的位置,在输入输出时不对in和out的值进行模运算,而让其自然溢出,并能够保证in-out的结果为缓冲区中已存放的数据长度。 将需要取模的运算用 & 操作代替( a % size = (a & (size − 1)) ), 这需...原创 2018-04-12 09:25:32 · 1246 阅读 · 0 评论 -
面向对象模型分析(继承,多态)
class是一种特殊的struct 在内存中 class 依旧可以看做变量的集合 class 中的成员函数和成员变量是分开存放的 每个对象有独立的成员变量 所有对象共享类中的成员函数 #include <iostream> #include <string> using namespace std; class A { int i; int...原创 2018-04-13 14:17:25 · 221 阅读 · 0 评论 -
C++异常类
c++异常类 Exception,接口类 ArithmeticException类, 计算异常 NullPointerException类,空指针异常 IndexOutOfBoundsException类,越界异常 NoEnoughtMemoryException,内存不足异常 InvalidParameterException,参数错误异常 //Exception.h #define T...原创 2018-05-01 09:20:01 · 911 阅读 · 0 评论 -
关于Cmake 链接静态库出现undefined reference to错误
在编写一个C++项目的时候,使用cmake管理工程,成功链接一个静态库,但是在编译时仍然出现undefined reference to 的错误。 最终发现问题是由于c和c++混编导致的。 解决方案: 由于我链接的库是使用c语言编写,所以需要在include头文件时加上 #ifdef __cplusplus extern "C" { #endif #include "XXX.h" ...原创 2018-05-06 21:07:20 · 24256 阅读 · 1 评论
分享