随笔分类 -  C/C++

摘要:DRAFT 梳理下我的技能树,要学的太多,学无止境 阅读全文
posted @ 2023-01-29 11:51 Zijian/TENG 阅读(709) 评论(0) 推荐(0) 编辑
摘要:最近需要开发一个 Java 的代码生成器,周末看了 2 天廖雪峰的 Java 教程,就能直接上手写 Java。说下自己最明显的感受,用的不多,理解不一定对: 【编译/解释】Java 编译+解释,运行在 JVM,跨平台移植方便,但执行速度/效率比 C++ 低 【编程范式】Java 纯面向对象,除了几个 阅读全文
posted @ 2023-01-26 09:27 Zijian/TENG 阅读(57) 评论(0) 推荐(0) 编辑
摘要:单例模式有很多种实现: 懒汉/饿汉 非线程安全 线程安全 每次判空加锁(效率不高) DCL:Double-check lock(繁琐,C++11 之前的最佳实现) Meyers’ singleton:静态变量(简洁,C++11 之后的最佳实践) C++11 规范保证了局部 static 对象的线程安 阅读全文
posted @ 2023-01-25 11:13 Zijian/TENG 阅读(138) 评论(0) 推荐(0) 编辑
摘要:考察点 返回值类型 MyClass&,可以连续赋值 参数类型:(const MyClass& rhs) 或者 (MyClass rhs) 值传递(copy-swap) 自赋值安全 无内存泄漏,旧值需要析构 异常安全 参考实现 copy-swap 惯用法 BennyHuo class MyString 阅读全文
posted @ 2023-01-25 10:49 Zijian/TENG 阅读(73) 评论(0) 推荐(0) 编辑
摘要:验证局部静态变量 static int cnt 在无锁情况下的 data race: 测试 C 源码: #include <stdio.h> #include <pthread.h> #include <stdlib.h> void* foo(void* args) { static int cnt 阅读全文
posted @ 2023-01-15 21:51 Zijian/TENG 阅读(205) 评论(0) 推荐(0) 编辑
摘要:原帖地址:https://stackoverflow.com/questions/10195343/copy-a-file-in-a-sane-safe-and-efficient-way 这是我在 StackOverflow 上见过的非常高质量的提问了:作者自己提出了很多种解法,并且做了性能测试。 阅读全文
posted @ 2022-08-06 10:05 Zijian/TENG 阅读(5142) 评论(0) 推荐(0) 编辑
摘要:《C++高级编程》第4版 18.2节 可以指向任何可调用对象:函数、函数对象、或 lambda 表达式;被称为多态函数包装器,可以当成函数指针使用,还用作实现回调函数的参数。function 真正有用的场合是将回调函数作为类的成员变量。 必须用 std::function<> 而不能用指针 如果 p 阅读全文
posted @ 2022-07-10 16:49 Zijian/TENG 阅读(106) 评论(0) 推荐(0) 编辑
摘要:建议先阅读 C++ 之父的 A tour of C++ 中相关章节 现代 C++ 对多线程/并发的支持 A Tour of C++(上) 现代 C++ 对多线程/并发的支持 A Tour of C++(下) 35 优先选用基于任务而非基于线程的程序设计 以异步方式运行函数 int doWork(), 阅读全文
posted @ 2022-05-04 10:02 Zijian/TENG 阅读(181) 评论(0) 推荐(0) 编辑
摘要:总结自《Effective Modern C++》条款 11 常见场景 单例模式删除复制构造、复制赋值运算符重载 理由 未定义的调用在连接阶段才暴露 =delete 可以支持任何函数的生成,包括非成员函数 =delete 可以阻止模版针对特定类型的实例化 ⚠️ 习惯上,=delete 都是 publ 阅读全文
posted @ 2022-05-03 20:24 Zijian/TENG 阅读(90) 评论(0) 推荐(0) 编辑
摘要:总结自《Effective Modern C++》第 4 章 裸指针七宗罪 裸指针无法说明指向的是单个对象还是一个数组 裸指针无法说明使用完指针是否需要析构,即从声明中看不出来指针是否拥有所指向的对象 即使知道需要析构,也不知道应该用 delete 还是调用某个类似 deinit(p) 的函数 即使 阅读全文
posted @ 2022-04-30 11:45 Zijian/TENG 阅读(1682) 评论(0) 推荐(0) 编辑
摘要:本文承接上文,总结自《Effective Modern C++》条款 17:理解特种成员函数的生成机制 特种成员函数 C++98 四种:默认构造、析构、复制构造、复制赋值运算符 C++11增加两种:移动构造、移动赋值运算符 合成机制 只有用到了才合成 没有显式声明任何构造的时候才会合成默认构造 合成 阅读全文
posted @ 2022-04-30 11:13 Zijian/TENG 阅读(118) 评论(0) 推荐(0) 编辑
摘要:一小段代码足以说明问题 核心测试代码 int main() { cout << "1."; Foo a1; // 默认构造 cout << "2."; Foo a2(a1); // 拷贝构造(直接初始化) cout << "3."; Foo a3 = a1; // 拷贝构造(拷贝初始化) cout 阅读全文
posted @ 2022-04-24 20:18 Zijian/TENG 阅读(367) 评论(0) 推荐(0) 编辑
摘要:CSAPP 并发编程笔记 并发和并行 并发:Concurrency,只要时间上重叠就算并发,可以是单处理器交替处理 并行:Parallel,属于并发的一种特殊情况(真子集),多核/多 CPU 同时处理 构造并发程序的方法 现代操作系统提供了 3 种基本的构造并发程序的方法: 进程:每个逻辑控制流都是 阅读全文
posted @ 2021-12-20 22:29 Zijian/TENG 阅读(424) 评论(0) 推荐(0) 编辑
摘要:描述 请实现一个函数,将一个字符串s中的每个空格替换成“%20”。 例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 数据范围 0<=len(s)<=1000。保证字符串中的字符为大写英文字母、小写英文字母和空格中的一种。 解法 0 - 书中 C 阅读全文
posted @ 2021-10-25 21:31 Zijian/TENG 阅读(99) 评论(0) 推荐(0) 编辑
摘要:本文承接前文 现代 C++ 对多线程/并发的支持(上),翻译自 C++ 之父 Bjarne Stroustrup 的 C++ 之旅(A Tour of C++)一书的第 13 章 Concurrency。本文将继续介绍 C++ 并发中的 future/promise,packaged_task 以及 阅读全文
posted @ 2021-10-11 22:46 Zijian/TENG 阅读(1005) 评论(0) 推荐(2) 编辑
摘要:本文翻译自 C++ 之父 Bjarne Stroustrup 的 C++ 之旅(A Tour of C++)一书的第 13 章 Concurrency。作者用短短数十页,带你一窥现代 C++ 对并发/多线程的支持。原文地址:现代 C++ 对多线程/并发的支持(上) -- 节选自 C++ 之父的 《A 阅读全文
posted @ 2021-10-10 17:40 Zijian/TENG 阅读(2466) 评论(0) 推荐(4) 编辑
摘要:初学者在刚开始读 C++ Primer 的时候,总是容易被书中各种初始化搞得头大:默认初始化、列表初始化、值初始化、类内初始值、构造函数初始值列表、new int 和 new int() 的区别... 本文把书中这些概念集中总结如下,大括号【】内为原书中文版第 5 版的相应页码。 列表初始化(lis 阅读全文
posted @ 2021-10-07 17:50 Zijian/TENG 阅读(891) 评论(0) 推荐(0) 编辑
摘要:正则表达式零宽断言 适用场景:匹配/提取/查找/替换以 xxx 开头,或以 xxx 结尾,但不包括 xxx 的字符串。 零宽断言 用法 含义 (?=exp) 零宽度正预测先行断言 lookahead exp1(?=exp2) exp1 之后必须匹配 exp2,但匹配结果不含 exp2 (?!exp) 阅读全文
posted @ 2021-09-05 16:29 Zijian/TENG 阅读(1157) 评论(0) 推荐(0) 编辑
摘要:一种比较简洁的实现:通过 fstream 和 stringstream 的 rdbuf() 实现。 #include <fstream> #include <string> std::string readFileIntoString(const std::string &filename) { s 阅读全文
posted @ 2021-08-30 19:49 Zijian/TENG 阅读(691) 评论(0) 推荐(1) 编辑
摘要:问题描述 帮同事 debug 时,看到如下的 C 代码:用中括号里的数值,指定元素在数组中的次序。第一次见这种用法,验证一下。 #include <stdio.h> int main(int argc, char* argv[]) { int arr[10] = { [9] = 9, [3] = 3 阅读全文
posted @ 2021-07-03 16:57 Zijian/TENG 阅读(4028) 评论(0) 推荐(1) 编辑

点击右上角即可分享
微信分享提示