上一页 1 2 3 4 5 6 7 ··· 27 下一页
摘要: 创建线程 每个程序至少有一个执行 main 函数的线程,其他线程也有自己的入口函数,两者会同时运行。 #include <thread> #include <iostream> void f() { std::cout << "hello world"<<std::endl; } int main( 阅读全文
posted @ 2020-04-04 16:16 刘-皇叔 阅读(699) 评论(0) 推荐(0) 编辑
摘要: 什么是并发 计算机术语中的"并发",指的是在单个系统里同时执行多个独立的活动,而不是顺序的一个接一个的执行。 对于单核CPU来说,在某个时刻只可能处理一个任务,但它却不是完全执行完一个任务再执行一个下一任务,而是一直在任务间切换,每个任务完成一点就去执行下一个任务,看起来就像任务在并行发生,虽然不是 阅读全文
posted @ 2020-04-04 09:07 刘-皇叔 阅读(901) 评论(0) 推荐(0) 编辑
摘要: git log 查看提交的记录,假设结果为: commit_id_3 第三次修改 commit_id_2 第二次修改 commit_id_1 第一次修改 ... 我们现在想要删除:commit_id_2 第二次修改。 执行: git rebase -i commit_id_1 之后弹出一个文件,将 阅读全文
posted @ 2020-04-03 16:23 刘-皇叔 阅读(4360) 评论(0) 推荐(0) 编辑
摘要: 查看某行代码谁写的: git blame file_name git blame -L 58,100 file_name # 58~100 行代码 其输出格式为: commit_ID | 代码提交作者 | 提交时间 | 代码位于文件中的行数 | 实际代码 根据 commit_ID 可以查看对应的提交 阅读全文
posted @ 2020-04-02 12:38 刘-皇叔 阅读(15201) 评论(0) 推荐(0) 编辑
摘要: 查看git上的个人代码量 git log --author="username" --pretty=tformat: --numstat | gawk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, 阅读全文
posted @ 2020-04-01 17:14 刘-皇叔 阅读(337) 评论(0) 推荐(0) 编辑
摘要: 右侧是否显示代码的缩略图 editor.minimap 进行设置,配置项如下: 是否显示代码的行号 你可以在设置项里搜索 editor.lineNumbers修改设置,配置项如下: 改完代码后立即自动保存 你可以在设置项里搜索 files.autoSave,修改配置项如下: 上图中,我们将配置项修改 阅读全文
posted @ 2020-04-01 14:01 刘-皇叔 阅读(731) 评论(0) 推荐(0) 编辑
摘要: 准备 ICON图标: "图标转换网" QT 项目目录下创建一个文件:app.rc,添加: 设置可执行程序图标,在 Pro 文件中添加: 设置程序启动后的图标: 阅读全文
posted @ 2020-03-20 21:54 刘-皇叔 阅读(1337) 评论(0) 推荐(0) 编辑
摘要: 文件准备 1. 编译程序 Release 版本,拷贝生成的 exe 到某个目录下。 2. 拷贝依赖库到上面的文件夹: 根据自己实际使用的编译器,打开终端,执行 这里列举出了程序的依赖库,但是没有自动拷贝到 test.exe 的目录下,我们可以手动拷贝上面的依赖库,根据使用的编译器版本选择相应的库,我 阅读全文
posted @ 2020-03-20 21:49 刘-皇叔 阅读(1189) 评论(0) 推荐(0) 编辑
摘要: 环境介绍 主机:ubuntu 16.04 虚拟机 板卡:hisi3559A 安装Eclipse 安装jdk sudo add-apt-repository ppa:openjdk-r/ppa sudo apt-get update sudo apt-get install openjdk-8-jdk 阅读全文
posted @ 2020-03-11 20:54 刘-皇叔 阅读(1224) 评论(0) 推荐(0) 编辑
摘要: “placement new” 通常是专指指定了位置的 new(std::size_t size, void mem),用于 vector 申请 capacity 剩余的可用内存。 但广义的 ”placement new” 指的是拥有额外参数的 operator new。 new 和 delete 阅读全文
posted @ 2020-02-29 12:06 刘-皇叔 阅读(133) 评论(0) 推荐(0) 编辑
摘要: new 和delete 必须遵循的惯例 operator new 需要无限循环地获取资源,如果没能获取则调用 ”new handler”,不存在 ”new handler” 时应该抛出异常。 operator new 应该处理 size == 0 的情况。 operator delete 应该兼容空 阅读全文
posted @ 2020-02-29 11:57 刘-皇叔 阅读(128) 评论(0) 推荐(0) 编辑
摘要: 为什么需要自定义 operator new 或 operator delete 检测使用错误。new 得到的内存如果没有 delete 会导致内存泄露,而多次 delete 又会引发未定义行为。如果自定义 operator new 来保存动态内存的地址列表,在 delete 中判断内存是否完整,便可 阅读全文
posted @ 2020-02-29 11:36 刘-皇叔 阅读(170) 评论(0) 推荐(0) 编辑
摘要: new 申请内存失败时会抛出 异常,此前会调用一个由 std::set_new_handler() 指定的错误处理函数。 set_new_handler() “new handler” 函数通过 std::set_new_handler() 来设置,std::set_new_handler() 定义 阅读全文
posted @ 2020-02-27 20:39 刘-皇叔 阅读(92) 评论(1) 推荐(1) 编辑
摘要: 模板元编程(Template Metaprogramming,TMP)就是利用模板来编写那些在编译时运行的C++程序。 模板元程序(Template Metaprogram)是由C++写成的,运行在编译器中的程序。当程序运行结束后,它的输出仍然会正常地编译。 C++并不是为模板元编程设计的,但自90 阅读全文
posted @ 2020-02-27 20:14 刘-皇叔 阅读(221) 评论(0) 推荐(0) 编辑
摘要: STL迭代器回顾 最简单的迭代器是输入迭代器(input iterator)和输出迭代器(output iterator), 它们只能向前移动,可以读取/写入它的当前位置,但只能读写一次。比如 ostream_iterator 就是一个输出迭代器。 比它们稍强的是前向迭代器(forward iter 阅读全文
posted @ 2020-02-27 20:02 刘-皇叔 阅读(106) 评论(0) 推荐(0) 编辑
摘要: 如果所有参数都需要隐式类型转换,该函数应当声明为非成员函数。在类模板中,需要所有参数隐式转换的函数应当声明为友元并定义在类模板中。 模板化的 Rational 模板参数推导出错 看起来很完美但它是有问题的。比如我们有如下的调用: 为什么第二条会出错呢?因为编译器无法推导出合适的模板参数来实例化 。 阅读全文
posted @ 2020-02-27 19:32 刘-皇叔 阅读(106) 评论(0) 推荐(0) 编辑
摘要: 提到智能指针可用来自动释放堆中的内存,STL中的迭代器也是一种智能指针,它甚至支持链表元素指针的 操作。 这些高级特性是普通指针所没有的。本文以智能指针为例,介绍成员函数模板的使用。 隐式类型转换 智能指针虽然比普通指针提供了更多有用的特性,但也存在一些问题,比如我们有一个类的层级: 普通指针可以做 阅读全文
posted @ 2020-02-27 12:53 刘-皇叔 阅读(148) 评论(0) 推荐(0) 编辑
摘要: 模板是个好东西,你可以在实现类型安全的同时少写很多代码。但模板提供的是编译期的多态, 即使你的代码看起来非常简洁短小,生成的二进制文件也可能包含大量的冗余代码。 因为模板每次实例化都会生成一个完整的副本,所以其中与模板参数无关的部分会造成代码膨胀。 把模板中参数无关的代码重构到模板外便可以有效地控制 阅读全文
posted @ 2020-02-27 11:50 刘-皇叔 阅读(98) 评论(0) 推荐(0) 编辑
摘要: 从面相对象 C++ 转移到模板 C++ 时,你会发现类继承在某些场合不在好使了。 比如父类模板中的名称对子类模板不是直接可见的,需要通过 this 前缀、using 或显式地特化模板父类来访问父类中的名称。 因为父类模板在实例化之前其中的名称是否存在确实是不确定的,而 C++ 偏向于早期发现问题(e 阅读全文
posted @ 2020-02-26 21:02 刘-皇叔 阅读(141) 评论(0) 推荐(0) 编辑
摘要: 模板参数声明 上面 class 和 typename 的使用没有区别,然而 typename 和 class 对编译器而言却是不同的东西。 typename 可以用来帮编译器识别嵌套从属类型名称,基类列表和成员初始化列表除外。 声明一个类型 typename 的第一个作用在于声明一个类型。为什么类型 阅读全文
posted @ 2020-02-26 20:36 刘-皇叔 阅读(261) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 ··· 27 下一页