- 博客(109)
- 收藏
- 关注
原创 模板显式、隐式实例化和(偏)特化、具体化的详细分析
最近看了看到了模板的特化,突然想起来上说的显式具体化、隐式具体化、特化、偏特化、具体化等概念弄得头晕脑胀,我在网上了找了好多帖子,才把概念给理清楚。
2024-06-10 11:57:25
744
原创 cmake/make
原文链接:https://blog.csdn.net/lxn9492878lbl/article/details/83655152。2、如果的工程的库文件发生变化,即使工程文件没有加入新的文件,也需要删除之前编译产生的中间文件重新cmake .编译。当工程文件发生变化,但是没有增加或是减少文件,只是工程文件的代码发生变化,这个时候只需要make,不需要cmake。1、当工程加入新的文件时,只需使用cmake .命令,让CMake重新生成Makefile就一切OK。
2024-03-31 15:39:29
273
原创 clock_sequential
https://blog.csdn.net/weixin_41464428/article/details/122051594
2024-03-06 20:05:39
153
原创 git grep
但不要忽略任何结果,你需要使用适当的搜索工具。如果你使用的是 Git 作为版本控制系统,你可以使用 git grep 命令进行搜索。:即使当前目录不是一个 Git 仓库,也会搜索当前目录中的文件。文件中的规则,搜索所有文件。要在指定的代码仓库中搜索。
2024-02-29 10:28:00
309
原创 Notepad++ 配置C/C++语言编译环境
https://blog.csdn.net/lanlanmoqi/article/details/132378203https://blog.csdn.net/weixin_43090173/article/details/123910468
2024-02-25 17:03:06
110
原创 【C++】const与constexpr详解
所谓常量表达式,指的就是由多个(≥1)常量组成的表达式。换句话说,如果表达式中的成员都是常量,那么该表达式就是一个常量表达式。这也意味着,常量表达式一旦确定,其值将无法修改。实际开发中,我们经常会用到常量表达式。以定义数组为例,数组的长度就必须是一个常量表达式:上述代码演示了 3 种定义 url 数组的方式,其中第 1、2 种定义 url 数组时,长度分别为 10 和 6+4,显然它们都是常量表达式,可以用于表示数组的长度;第 3 种 url 数组的长度为 length,它是变量而非常量,因此不是一个常
2024-02-18 21:16:50
1160
原创 boost::apply_visitor
是 Boost 库中用于访问 Variant 类型对象中存储的值的工具函数。Variant 类型是一种能够容纳多种类型值的类型,类似于联合体(union)或是 C++17 中的 std::variant。类型对象中的值,根据存储的不同类型值自动调用对应的处理函数,这对于处理不同类型的值在一组数据结构中很有用。则允许你使用访问者模式(Visitor Pattern)来处理 Variant 类型对象中的值。在 Boost 中,Variant 类型提供了一种安全、类型化的方式来处理不同类型的值。
2023-12-20 15:58:12
446
原创 BOOST_FUSION_ADAPT_STRUCT
适配后,这个结构体或类就可以被 Fusion 库中的算法(如 boost::fusion::for_each、boost::fusion::transform 等)使用,并且可以像序列一样进行迭代和操作。是 Boost 库中 Fusion 库提供的一个宏,用于简化结构体(或类)与 Fusion 库中序列的适配(Adaptation)过程。宏接受两个参数:第一个参数是要适配的结构体或类的名称,第二个参数是一个括号中的序列,序列中包含每个成员的类型和名称。
2023-12-20 10:05:11
461
原创 x3::forward_ast
在 Spirit X3 中,解析器(parser)可以生成一个抽象语法树(AST),它通常表示了输入文本的语法结构。x3::forward_ast 允许用户将这个抽象语法树中的部分或全部信息传递到自定义的数据结构中。在 Boost Spirit X3 中,x3::forward_ast 是一个转换器(transformer),用于将解析器(parser)的结果转发给用户自定义的结构。这个功能通常用于将解析器解析出的数据,按照用户定义的格式或者要求,存储到特定的数据结构中,以便进一步处理或使用。
2023-12-19 17:50:27
411
原创 boost::apply_visitor
类型对象中的值,根据存储的不同类型值自动调用对应的处理函数,这对于处理不同类型的值在一组数据结构中很有用。则允许你使用访问者模式(Visitor Pattern)来处理 Variant 类型对象中的值。在 Boost 中,Variant 类型提供了一种安全、类型化的方式来处理不同类型的值。,并依次给它赋值为整数、字符串和浮点数。在这个示例中,我们首先定义了一个包含。让我们来看一个简单的示例来说明。函数,分别用于处理不同类型的值。对象中存储的实际值类型,调用。函数中,我们创建了一个。,它包含了三个重载的。
2023-12-19 15:13:15
394
原创 C++ 在.h文件中包含头文件和在.cpp文件中包含头文件有什么区别?前置声明
Note:类A在编译的时候不需要拿到类B的定义是因为这里面定义的是指针,而对于指针是不需要定义就可以进行内存布局的,在编译A的类的声明的时候,在进行内存布局的时候是不需要拿到B的定义的。假设有两个类 A 和 B,A 类包含了 B 类的一个指针成员,并且在 A.cpp 文件中使用了 B 类的成员函数。6、如果a.c包含了头文件a.h,a.h包含了头文件b.h,b.c也包含了b.h,那么当b.h发生改变时,a.c和b.c都会重新编译。其中A类有一个成员b是Class B的指针,这个时候可使用类前置声明。
2023-12-19 14:47:08
1642
原创 【C++ 语法】__VA_ARGS__ 可变参数宏
正在编译文件的路径及文件名:正在编译文件的行号:编译时刻的日期字符串 如“Jun 17 2017”:编译时刻的时间字符串 如”1000“提示:__LINE__是整型数据;其实除了这些还有很多相关的定义,比如:1.:函数名,类型为:字符常量指针。2.:IDE版本信息,类型为:整型。
2023-12-13 18:12:20
1504
原创 ASAN内存检测
ASan是Address Sanitizer简称,它是一种基于编译器用于快速检测原生代码中内存错误的工具。简而言之, ASan就是一个用于快速检测内存错误的工具, 目前已经集成在LLVM 3.1+和GCC 4.8+中。
2023-12-06 10:48:00
1069
原创 CMOS介绍
原理:1.通过门级和衬底加一个垂直电场Ev,从而在两口井之间形成反形层2.如果加的电场足够强,反形层就可以把source(源极)和drain(漏极)这两口井连接起来 3.在source和drain之间加入电场就导通了4.垂直电场越大,形成的沟道(反形层)就越宽,导电能力就越强,漏源之间的电阻就越小。
2023-11-12 14:24:43
478
原创 chapter 3-6
在2004年3月14日,Keith H. Duggar向我发送了上述的专利变体,它优于我最初想出的这个表达式,r = (+1 | (v >> (sizeof(int) * CHAR_BIT - 1))) * v,因为没有使用乘法。这种方法之所以有效,是因为如果 x < y,则 -(x < y) 将全部是1,所以 r = y ^ (x ^ y) & ~0 = y ^ x ^ y = x。否则,如果 x >= y,则 -(x < y) 将全部是0,所以 r = y ^ ((x ^ y) & 0) = y。
2023-10-29 17:21:33
71
原创 2. Compute the sign of an integer
上面的最后一个表达式等同于对于32位整数,sign = v >> 31。这比明显的方法sign = -(v < 0) 快一次操作。这个技巧的原因是,当有符号整数向右移位时,最左边的位的值被复制到其他位上。最左边的位在值为负时为1,否则为0;所有的1位得到-1。不幸的是,这种行为是与体系结构相关的。
2023-10-29 16:44:28
597
原创 C/C++位操作
https://graphics.stanford.edu/~seander/bithacks.html#DetectOppositeSigns
2023-10-29 15:51:08
35
原创 2.X3-解析器语义动作
前面的示例非常简单。它只是识别数据,但没有对数据执行任何操作。它只回答了一个问题:输入是否匹配?。为此,您需要使用语义动作。语义动作可以附加到语法规范的任何位置。这些动作是多态的函数对象,每当解析器成功识别输入的一部分时,它们就会被调用。假设您有一个解析器p和一个多态的C++函数对象f。您可以通过将函数对象fp[f]上述表达式将函数对象 f 与解析器 p 关联起来。
2023-10-15 18:22:53
108
原创 测试代码1
/ 使用 BOOST_FUNCTION_ADAPT_STRUCT 宏适配结构体到 Fusion 序列。// 创建一个 Person 结构体对象。// 定义一个结构体。
2023-10-15 12:22:27
127
原创 1.X3-Warming up
它使用了 *double_,其中 * 是Kleene星号,表示可以重复出现前面的 double_ 解析器来匹配零个或多个浮点数。这是一种灵活的解析方式,允许匹配任意数量的浮点数,它类似于正则表达式中的 “*”,用于表示重复出现。程序中使用 double_ >> double_ 表达式,它将两个 double_ 解析器连接在一起,表示需要解析两个浮点数,它们之间用 “>>” 操作符表示“后跟”。这个示例强调了如何将简单的解析器组合成更复杂的解析器,以便解析更复杂的文本结构。创建一个解析器,用于解析浮点数。
2023-10-15 11:36:45
540
原创 序列化单例
序列化库依赖于一些静态变量和表格的存在,用于存储与运行时类型相关的信息。例如,这些表格可以将导出的名称与类型相关联,或者将基类与派生类相关联。
2023-09-26 16:46:39
90
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人