自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(102)
  • 资源 (4)
  • 收藏
  • 关注

原创 dngrep(版本 4.2.46.0)里配置对比软件BeyondCompare

dngrep会自动探测,自动填充,不用手动。

2024-09-13 12:01:13 203

原创 dngrep(版本 4.2.46.0)里配置用NotePad++打开文件

打开之后定位在292行:

2024-09-13 11:34:25 111

原创 编译geos 3.13.0.beta1需要注意的事项

现在的代码,解压至E:\geos-3.13.0beta1。

2024-09-04 09:33:54 129

原创 饰面(veneer)

饰面(veneer)_veneer 汇编-CSDN博客 模板化继承、泛型继承、Veneers的概念解析_getdlgitemtextlength-CSDN博客

2024-08-03 00:45:56 214

原创 一种在编译期加约束的方式,可以学习一下这个思路

【代码】一种在编译期加约束的方式,可以学习一下这个思路。

2024-08-03 00:04:46 99

原创 进化版:一个C++模板工厂的编译问题的解决。针对第三方库的构造函数以及追加了的对象构造函数。牵扯到重载、特化等

原始版本在这里。

2024-08-02 17:40:21 330

原创 [转发]enable_if和void_t

个人总结一下,std::enable_if有四种使用方式,分为返回值,参数,类型模板参数,非类型模板参数,对于后两种需要c++11以上的版本才支持。enable_if在没有指定第二个模板参数时候enable_if::type默认为void,所以不需要有返回值。举个例子,比如我需要输出一个数字,模板类型T需要为一个数字类型,我们来看看四种用法。个人认为最好的方式,相比上三种方式,更简洁,并且也能同时处理左值和右值的情况。利用0为T类型的指针的默认参数,从而进行推断。

2024-07-28 23:15:20 181

原创 md,感觉enable_if的推导过程又迷糊了。这次好像又清晰了一些

基本就是:由泛型版本定下参数列表里的参数,

2024-07-27 22:34:13 151

原创 【无标题】

原因呢,应该这个模板,不止用来判断单单类型这一项,而是有更复杂的逻辑:判断一个类型里是否定义有某个类型。所以,既需要定义一个类型,又需要一个额外的约束:此类型中定义了一个具体的类型。当有偏特化版本时,编译器到底是如何进行推导的。判断是不是个类型,直接用特化判断不行了吗,比如。1、泛化版本为什么要用两个参数。

2024-07-27 00:30:00 230

原创 【无标题】

【代码】【无标题】

2024-07-26 21:59:33 112

原创 一个C++模板工厂的编译问题的解决。针对第三方库的构造函数以及追加了的对象构造函数。牵扯到重载、特化等

在一个项目里,调用了第三封的库,这个库里面有个类用的很多,而且其构造函数至少有6个,并且个人感觉还不够多。根据实际使用,还得增加一些。1、增加构造函数,比如除了下面的,还增加(ElementId,const std::wstring& modelName),以及FarElementId2、希望能用通用的构造接口来生成对象,比如Create3、希望能用指针对象(智能指针)

2024-07-21 18:32:53 885

原创 Std::unique_ptr 尝试引用已删除的函数

std::unique_ptr的源码。

2024-07-19 17:49:28 193

原创 【转载】探索 Windows 平台下的 C++ 异常捕获策略:如何让Windows C++应用程序尽可能捕获所有异常?

这个标题起的有点纠结,感觉不太好起。实际上本文想要讨论的场景,是一个比较经典的Windows C++商业应用软件的开发需求:我们希望能够在程序发生异常并崩溃时,能够弹出对用户比较友好的崩溃提示窗口,并且生成dump文件上传到服务器上,让开发人员能够获取并分析。因此,本文提出一套捕获Windows平台下C++程序异常的方案,经过长时间的线上验证,是可以捕获到绝大多数的异常的。至于为什么不是所有异常,我们后面再讨论。这段程序使用了多种技术来捕获异常。

2024-07-19 16:08:19 376

原创 spdlog源码学习:std::unique_ptr订制删除器,guard用法,以及decltype

1、std::unique_ptr肯定会析构,除非提前release出来,交出管理权。注意上面例子中decltype的用法,auto的类型用decltype进行推导。看看别人的例子,展示了std::function用于删除器时,字节消耗的最多。下面研究下unique_ptr自定义删除器的用法。

2024-07-19 15:01:53 242

原创 研究:右值引用,本质还是引用,一种权限比普通引用更大的引用?内部的实现可能是指针

所以,在函数的定义的角度,以下做法就是错误的:函数内部的局部变量,返回值类型是DPoint3d&&。不管提没提供移动构造函数。不管在外面是否用右值DPoint3d&&来接。分析来看,右值引用&&,有点像一种指针,一种比引用&更牛逼一些的指针,因为引用只能引用左值,而右值引用可以直接引用右值,也可以通过std::move(左值)的方式进行引用。考虑下面的函数,注意其返回值类型。

2024-07-18 10:44:33 218

原创 函数返回右值的一点学习研究

仔细研究下,明明都被析构了,但仍然以右值的名义给带出来了,当然带出来的也是已经析构之后的变量。有个假象,其实对象已经析构了。此时的DPoint3d&& a指向的是一个已经析构过的对象。并且有个警告,说:warning C4172: 返回局部变量或临时变量的地址。从输出结果来看,a和fun1里面的临时 对象的地址都是一样的。注意,是临时变量的“地址”

2024-07-17 14:06:52 194

原创 如果函数返回值类型是右值引用,并且返回的是函数内部的局部变量,会如何

改一下fun函数,直接返回一个对象,发现调用了DPoint3d(const DPoint3d&& pt);省流:不管看起来好像fun里面的局部变量a好像被“移动“出来了,但a在除了它所在的作用域后立刻就释放了,move出来的变量已经指向了“空悬”的对象。添加更多的构造函数,还是不会调用到,为什么呢,终于明白,这个地方的c变量,其实就是一个右值引用,属于一个别名。执行之后,c就变成了一个左值,给c的y值赋值,发现b的y值也变了。那其实这种情况下,DPoint3d&& c = std::move(b);

2024-07-17 11:32:57 304

原创 打印模板类型信息的技巧

注意,变量a被括号括起来和不括起来,类型的区别,一个是int&,一个是int。

2024-07-15 14:11:58 194

原创 std::unique_ptr简单用法

【代码】std::unique_ptr简单用法。

2024-07-08 00:12:28 115

原创 shared_ptr的operator = 里都发生了什么

创建了个临时对象,这个临时对象挺巧妙的,其在创建时,会调用_Copy_construct_from,此时会把计数增加到4,然后呢,它紧接着会析构,会再把计数减到3。这一增一减,计数不变。执行到最后一行代码之前时,计数为3。

2024-07-08 00:11:20 192

原创 cloc 2.0不支持中文文件名了。1.94还支持

左边是1.94的统计结果,右边是2.0的。cloc1.94还是支持的。我说怎么少统计了几千行。

2024-06-04 09:50:40 425

原创 函数中返回shared_ptr时发生了什么。右值构造函数,以及对计数的影响。

【代码】函数中返回shared_ptr时发生了什么。右值构造函数,以及计数。

2024-06-04 00:30:54 96

原创 是shared_ptr的构造函数,还是operator =

/这一步调用的哪个函数?sec = ptr;

2024-06-03 17:26:02 221

原创 std::shared_ptr,reset()函数

怎么说呢,对于ptr在函数退出时把计数器减1,这个reset操作相当于提前进行了减1操作。刚进函数的时候,计数为:ptr:3, ctrl_block:3,见下面图片里的。感慨:不深入阅读源代码,真的心虚,也用不好。当执行完swap之后,见下面图片里的。

2024-06-03 17:15:06 266

原创 for循环里如果std::pair的类型写不对,可能会产生拷贝初始化行为,造成性能损失。以及推荐写法。

其中,std::pair就是for (const std::pair& data : t)里的std::pair& data,显式指定的类型。最好的办法是用for(const auto& data : t),这种写法也不会走std::pair的构造函数。把端点下在:for (const std::pair& data : t)由于构造函数也是个模板,所以它的参数也是推导出来的,所以就是const std::pair

2024-05-26 20:52:56 264

原创 fmtlib源码学习:is_contiguous

【代码】fmt.v8::is_contiguous。

2024-05-19 22:02:23 348

原创 fmtlib源码学习:fmt::basic_format_context

里面保存了OutputIt,其实就是std::back_insert_iterator的一个子类,见。用等于号(=),内部会调用push_back。

2024-05-14 10:26:03 130

原创 fmtlib源码学习:format_arg_store以及fmt::make_format_args(args...)

注意remove_cvref_t...,它的意思是把每个参数都给去掉const等信息,然后用逗号分隔。remove_cvref_t...的结果就是double,int,std::string。比如args展开是const double, int&, const std::string。一般默认类型都是最后一个。可能跟后面的参数是变长有关。注意,Context是默认的类型:format_context。这个函数是把参数args生成format_arg_store。

2024-05-13 00:17:30 279

原创 fmtlib源码学习:basic_format_string

basic_format_string构造函数用enable_if做了筛选,如果变量类型不能被转换成basic_string_view,那么这个构造函数就不能使用。因为这个类里面有个成员变量是basic_string_view str_;,如果不能转换成功,那么就无法赋值给这个成员变量。就是里面有一个basic_string_view类型的成员变量,其他的都是编译期的检查。果然就把信息给打印出来了。而且还给了其他信息。

2024-05-12 13:18:07 207

原创 fmtlib源码学习:变长参数的使用,以及两种展开的写法,值得学习

第二个参数fmt的时候,fmt按照format_string的样式进行推导,此时要确定T...,那么这个T...就是下面的两个参数const double和int了,由于这里用的是模板,而且用的是T&&,所以折叠后就变成了const double&和int&了。format_string的定义中,第一个参数是字符类型char,剩下的是type_identity_t...仔细观察format_to这个函数,基本上只有两个参数类型,一个是OutputIt,一个是...T。

2024-05-11 17:14:53 420

原创 返回类型后置,一个用途是为了逻辑上的体现?

大家一般都是先关心参数,然后最后再看返回的是什么类型。在这里把返回类型后置,可能就是一种逻辑上的体现吧。

2024-05-11 11:52:28 134

原创 关于fmt的用法

打印range:vector,pair、tuple、set和map。对字符串进行截断(只截取字符串的前几个字符),前端补齐空格或者其他字符进行对齐,浮点数的精度,以及四舍五入。用fmt::ptr打印指针。内存管理:分解字符串?长数字加都好分隔符,

2024-05-11 11:48:52 376

原创 fmt::arg的使用

也就是说,如果觉得{}或者{0}的表达方式不够明确,可读性不好。比如说想表达一个公式:x+y=10的计算过程:4+6=10。

2024-05-11 10:25:16 201

原创 一个单例模式中使用std::unique_ptr引起的莫名其妙的COFF损坏的问题(未解决)

看到网上有人说这是一个编译器的bug:有文章解释如下:LNK1254, LNK1284, and LNK1235 linker errors may occur while compiling a C source file with the /clr compiler option (822329)LINK : fatal error LINK1254: metadata for symbol symbol name inconsistent with COFF symbol table<managed

2024-04-30 11:36:17 883

原创 std::ignore的定义

把一个变量赋值给ignore,还行,没有拷贝等动作,不用担心性能损失。

2024-04-29 15:08:49 196

原创 后置返回类型的一种写法,可能是为了消除某种警告

【代码】后置返回类型的一种写法,可能是为了消除某种警告。

2024-04-29 14:27:24 206

原创 【转载】C++代码中将函数返回类型后置有啥好处吗

内容如下:C++代码中将函数返回类型后置有啥好处吗?这种语法是 C++11 新增的,学名叫 trailing return type[1]。翻译过来是,trailing 是后面的、拖尾的意思。书写 int func() 比书写 auto func() -> int 省笔墨。强制所有函数的声明改成后者,就如同强制把所有的变量声明类型改成 auto 一样,代码有异味,变得恶心。

2024-04-29 14:14:55 847 2

原创 Trailing return type (后置返回类型)

【代码】Trailing return type (后置返回类型)

2024-04-29 13:46:20 102

原创 fmtlib源码学习:is_contiguous

【代码】fmt的is_contiguous。

2024-04-28 15:57:20 105

原创 fmtlib源码学习:判断是否为reference_wrapper

reference_wrapper的定义。

2024-04-28 14:32:56 157

架构之美 英文版 Beautiful Architecture

还需要多说吗? 经典书籍! 从国外网站上下的。

2009-12-04

一种Delegate机制的设计与分析

是我从期刊网上下载的,扣了我3块钱。 主要讲了委托的如何实现。

2009-08-27

计算机组成原理(唐朔飞版)

本书概念清楚,通俗易懂,书中举例力求与当代计算机结合,可作为高等院校计算机专业教材

2009-08-26

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除