C++
文章平均质量分 82
海将河推走
这个作者很懒,什么都没留下…
展开
-
C++20 协程(2):理解co_await运算符
理解co_await的工作方式可以让我们更明白协程的行为,以及协程如何被暂停和恢复。在这篇文章中,我将解释co_await运算符的机制并引入Awaitable和Awaiter。翻译 2022-01-28 22:34:57 · 2935 阅读 · 0 评论 -
使用C++开发的NES(FC)模拟器
It is exciting!原创 2021-12-24 17:28:39 · 2067 阅读 · 0 评论 -
C程序的内存布局
C程序的内存布局理解C程序的内存布局非常重要。这篇文章将说明C程序的内存布局,并通过一些工具和程序来验证它们。内存布局是与平台相关的,这篇文章的测试的环境为:Ubuntu 20.04 64位gcc version 9.3.0文章目录C程序的内存布局预备知识典型的C程序内存布局1. 文本段2. 初始化的数据段3. 未初始化的数据段4. 堆5. 栈验证简单的测试程序通过objdump验证参考预备知识在开始之前,需要了解objdump工具的基本使用,如果你已经非常熟悉它们,请跳过这部分。我们将原创 2020-11-24 19:13:00 · 425 阅读 · 0 评论 -
C和C++实现可变参数函数
C和C++实现可变参数函数C语言中的printf相关的函数,C++中的emplace相关的函数都使用了变参函数。这篇文章将简单介绍C和C++的不同实现方式。文章目录C和C++实现可变参数函数C语言实现可变参数函数一个简单的例子va_list类型va_stat宏va_copy宏va_end宏va_arg宏C++实现可变参数函数通过std::initializer_list实现变参函数一个简单的例子类模板std::initializer_list通过参数包实现变参函数基础知识一个简单的例子使用折叠表达式简化原创 2020-11-22 12:30:12 · 407 阅读 · 0 评论 -
C++利用EasyX绘制心形线
代码如下#include <graphics.h>#include <cmath>#include <conio.h>constexpr auto PI = 3.1415926;constexpr auto ONE_ANGLE = PI / 180;//该函数用于绘制心形线//_x: x方向上的偏移量//_y: y方向上的偏移量//a:...原创 2019-05-05 23:01:47 · 2903 阅读 · 3 评论 -
C++函数的调用约定
C++函数的调用约定文章目录C++函数的调用约定引入常见的调用约定__cdecl__stdcall__fastcall参考引入调用约定允许你指定被调函数和调用者之间传递参数和返回值的方式。不同的调用约定区别主要在于:参数和返回值放置的位置。参数传递的顺序。调用前设置和调用后清理的工作,在调用者和被调用者之间如何分配。并非所有约定都在所有支持的平台上可用,某些约定使用平台特定的实现。这篇文章描述的是x86平台。在 x86 平台上,所有参数在传递时都将加宽到 32 位。 返回值也将加宽到 3原创 2020-10-28 14:34:23 · 583 阅读 · 0 评论 -
C++代码布局
C++代码布局问题一致的布局是很有用的,C++对代码的布局没有严格要求,这导致了许多C++代码都有不一样的布局风格,阅读起来很不方便。在我们周围存在许多不同风格的代码布局,人们赞同或反对它。实际的项目可能包含了许多不同来源的代码,因此,统一代码的布局通常是不可能的。但是,在你不知道使用或不被要求使用某种布局时,使用一种统一的布局是明智的做法。我们可以通过IDE或一些工具来格式化我们的代码,例如Visual Studio IDE和clang-format工具。C++核心指南(C++之父参与编写)提供原创 2020-10-09 14:16:19 · 405 阅读 · 0 评论 -
C++线程池
C++线程池文章目录C++线程池介绍使用C++实现线程池1. 查看系统支持的最大线程数量2. 线程池的方法和数据结构3. 线程池的构造函数4. 无限循环的函数5. 线程池的析构函数6. start函数测试参考资料C++线程池的简单实现。完整代码:https://github.com/ocfBNj/ThreadPool介绍线程池(英语:thread pool):一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免原创 2020-10-07 17:14:24 · 772 阅读 · 1 评论 -
C++20 协程(1):协程理论
这是C++ Coroutines TS系列文章的第一篇,Coroutines是一种新的语言特性,目前已经纳入C++20语言标准。翻译 2020-10-01 16:38:09 · 2338 阅读 · 0 评论 -
C是C++的子集吗?
文章目录引入例子1. void*类型2. 字符字面值3. 字符串字面值参考引入很多人都认为C是C++的子集,但严格来说并不是,下面给出几个例子。例子1. void*类型在C语言中,void*可以隐式转换为任何类型,但在C++语言中不合法!2. 字符字面值在C语言中,字符字面值是int类型,而在C++语言中,字符字面值是char类型。3. 字符串字面值这是一个很常见的错误,...原创 2020-04-27 11:39:55 · 1977 阅读 · 0 评论 -
C++20:使用协程实现简易生成器
学习C++协程https://lewissbaker.github.io/C++协程TS已并入C++20,VS2017或2019暂不完全支持协程,使用头文件experimental/coroutine及命名空间std::experimental。支持协程则替换为使用头文件coroutine及命名空间std即可。注意,VS2017或2019需添加命令行选项/await,不然会出现类似message : Please use '/await' command-line option to enable re原创 2020-08-07 23:11:51 · 1017 阅读 · 0 评论 -
C++实现字符串与数值转换
在C++之父的官网看到的,利用stringstream即可#include <string>#include <sstream>template <typename _Ty>std::string toString(const _Ty& value) { std::ostringstream os; os << va...原创 2020-03-12 22:13:55 · 507 阅读 · 0 评论 -
解决vs使用cin.sync()无法清空输入缓冲区的问题
如图所示,在vs中使用cin.sync()无法清空输入缓冲区,使用下一行代替即可#include <iostream>int main(void) { int no = 0; std::cin >> no; if (std::cin.fail()) { std::cin.clear(); std::cin.sync();//无法清空输入缓冲区 /...原创 2019-05-15 12:48:30 · 2523 阅读 · 3 评论