
c++
黑塞123
这个作者很懒,什么都没留下…
展开
-
std::as_const的简单实用
【代码】std::as_const的简单实用。原创 2023-03-15 23:17:28 · 777 阅读 · 0 评论 -
Gtest入门介绍(三 )
测试接口:比如当我们在单元测试、模块的接口测试时,当这个模块需要依赖另外一个/几个类,而这时这些个类还没有开发好(那名开发同学比较懒,呵呵),这时我们就可以定义了Mock对象来模拟那些类的行为。说得更直白一些,就是自己实现一个假的依赖类,对这个类的方法你想要什么行为就可以有什么行为,你想让这个方法返回什么结果就可以返回怎么样的结果EXPECT_CALL(mock_object, method(matcher1, matcher2, ...)).With(multi_argument_matcher)原创 2022-02-07 18:05:35 · 3984 阅读 · 0 评论 -
Gtest入门介绍(二)
测试夹具:对多个测试使用相同的数据配置如果您发现自己编写了两个或多个对相似数据进行操作的测试,您可以使用测试夹具。这允许您为多个不同的测试重用相同的对象配置。要创建夹具: 从 派生一个类::testing::Test。以 开始它的主体protected:,因为我们希望从子类中访问夹具成员。 在类中,声明您计划使用的任何对象。 如有必要,编写一个默认构造函数或SetUp()函数来为每个测试准备对象。一个常见的错误是拼写SetUp()为 Setup()small u-overri原创 2022-02-07 11:44:57 · 643 阅读 · 0 评论 -
Gtest入门介绍(一)
Gtest入门介绍简单使用: //test function int getdata(int n,int m) { return n+m; } TEST(getdata, demon) { EXPECT_EQ(1,1); // 等于 EXPECT_NE(1,2); //不等于 EXPECT_LE(1,2); // 小于等于 EXPECT_LT(getdata(1,-1),原创 2022-02-05 11:46:47 · 1538 阅读 · 0 评论 -
c++ threadpool
ThreadPool c++17采用多线程多对列,每个线程控制一个队列,替代老的多个线程公用一个队列。将任务拆分多个下发给每个线程,每个线程掌管 M(tasks) / N(threads)个任务M(tasks) / N(threads)个任务 公用一个队列。减少竞争。使用方法:初始化线程池 ThreadPool pool(4); //4个thread std::vector<std::future<int>>vec;添加任务for(int i =0;原创 2022-01-15 20:46:44 · 2140 阅读 · 0 评论 -
Qt breakpad编译使用
breakpad原创 2021-12-05 23:04:32 · 497 阅读 · 0 评论 -
C++17 特性,让你的代码更简单(随笔)
结构化绑定返回复合对象std::tuple<char, int, bool> mytuple(){ char a = 'a'; int i = 123; bool b = true; return std::make_tuple(a, i, b);}auto mytuple1(){ char a = 'a'; int i = 123; bool b = true; return std::tuple(a, i, b)原创 2021-10-09 21:53:26 · 413 阅读 · 0 评论 -
C++ 返回值优化详解 RVO与NRVO
具体讲解连接:https://www.codenong.com/cs106863732/https://www.yhspy.com/2019/09/01/C-%E7%BC%96%E8%AF%91%E5%99%A8%E4%BC%98%E5%8C%96%E4%B9%8B-RVO-%E4%B8%8E-NRVO/转载 2020-12-20 18:56:44 · 219 阅读 · 0 评论 -
QT linux下加载so(error while loading shared libraries: libXXX.so.X: cannot open shared object file: No)
常见方式>在pro 中配置如下:INCLUDEPATH +=/usr/local/include/idrcLIBS += /usr/local/lib/libbotan-3.so但是一直报错:error while loading shared libraries: libXXX.so.X: cannot open shared object file: No such file解决办法:linux 一般默认加载的目录是/usr/lib /lib, 想要你的so目录加载进去,进的设置;原创 2020-12-15 09:29:33 · 3123 阅读 · 0 评论 -
breakpad windows 编译使用
(一): 编译之前的准备<1>下载对应的依赖:下载breakpadgit clone https://chromium.googlesource.com/breakpad/breakpad安装python(python2 版本,3会报错)获取 gypgit clone https://chromium.googlesource.com/external/gyp获取googletestgit clone https://github.com/google/googletest.g原创 2020-12-07 00:43:36 · 1392 阅读 · 0 评论 -
andriod zipalign 支持apk 2G 以上的对齐
该工具用python 实现 zipalign 兼容2G以上的apk 包括(64位)项目地址:本篇博客 只讲解 zip 32, 64的结构.也就是 zipalign 的实现原理:首先看下zip 的结构吧: 4.3.6 Overall .ZIP file format: [local file header 1] [encryption header 1] [file data 1] [data descriptor 1] . . . [local file hea原创 2020-05-24 14:58:06 · 2607 阅读 · 6 评论 -
为什么 建议用 emplace_back 而不是 push_back
1>: 问道emplace_back 与 push_back 的具体区别 基本上博客都会说 减少一次拷贝构造 或者 移动拷贝.但具体 是怎末减少, 为什么 是拷贝构造 或者 移动构造 ?emplace_back 允许显示转换. 如代码 //1> 中, 采用了显示转换 达到了 只调用 一次构造函数.如果 emplace_back 传入的是 右值 它也和 push_back 一...原创 2020-04-01 20:26:24 · 1059 阅读 · 1 评论 -
构造函数初始化列表 与 赋值 的区别
区别 1: 可能只知道 一个效率高一个效率低,具体低在哪里?区别 2:成语变量是 引用, 或者const 修饰,必须初始化.区别2 这里不做解释, 具体讲解1:如果成员变量类型是 内置类型(int, char ), 那么初始化和赋值的成本是相同的.这里的效率高低, 指的是自定的类型(class)class test{public: test(){ std::...原创 2020-01-29 17:50:37 · 387 阅读 · 0 评论 -
模板类中 typename的用法,以及函数的定义和声明
typename 的用法:第一种template<typename T> 这种大家都知道, 和 template<class T> 一样,就不多讲解了第二种: 嵌套从属名称注意代码中的erase() 和 print() 以及 typedef list<T*> data_typetemplate<class T>class L...原创 2020-01-29 11:00:28 · 1210 阅读 · 0 评论 -
多线程开发之读写锁
读写锁与互斥量类似,不过读写锁允许更高的并行,互斥量要么是锁住状态,要么是不加锁状态。而且一次只有一个线程可以对其枷锁。读写锁就不一样了,虽然一次只有一个线程可以占有写模式的读写锁,但是多个可以同时占有读模式的读写锁。首先介绍:读锁,具体看代码:#include #include#includeusing namespace std;int glable_num=10;原创 2017-08-23 14:12:21 · 299 阅读 · 0 评论 -
Qt 数据可视化之3D图形
前段时间在Qt事例中看到了3D图形,就参考案例,做了一个相似的demon.不多说了,先看做的两个效果图吧。这里主要讲解第一个,第二个的代码会打包上传。感兴趣可以下载。工程文件: QT += datavisualizationSOURCES += main.cpp 因为用的是3D,所以工程文件要加datavisualization。主原创 2017-10-11 10:40:09 · 20406 阅读 · 10 评论 -
Qt QtreeWidget树形结构图表
本例子采用treewidget类:他继承自treeview相对于treeview能简单方便一点。本例思路:三个root节点,每个root节点在添加child节点对应在child节点里添加item(项)。具体看:QTreeWidgetItem *additem();void addroot(QTreeWidget *rootwidget,QStringList list)///原创 2017-10-17 13:22:42 · 3178 阅读 · 0 评论 -
'const QString' as 'this' argument of 'QString& QString::operator=(const char*)' discards qualifiers
在Qt中QList,Qvector一般获取元素都是通过at(index)来获取,但是at()的返回是一个const & 常引用,也就是元素不支持改变。如下:是不是元素就不可以改变了?c++中的list容器可不是这样的。Qt提供了一个replace(),函数来替换元素。at()可能是问了数据的安全性把。当然不用replace() 也是可以改变的:见下图:c++中可以通过,[]下标,和迭代器来...原创 2018-04-14 19:20:09 · 2441 阅读 · 0 评论 -
定时器与线程的区别
看项目代码的时候看到他们大部分会用到定时器,有时也会用到线程,到底线程和定时器有什么区别?网上看了些解释:定时器:程序中开启两个定时器,给人的假象是好像是同时进行。。。。其实不然,就是赤裸裸的串行,除去定时器的串行运行,以及效率不说,他其实和线程差不多少。如下看两个定时器的运行: QTimer *time=new QTimer; time->start(2000); co...原创 2018-04-14 20:39:34 · 18674 阅读 · 10 评论 -
Qt 制作动态库 .dll
至于动态库有什么好处,这里就不多说了.直接开干吧。1:动态库无非就是,将你的代码封装,将.h 文件 和 dll 库提供给别人步骤如下:<1><2><3>这个动态库的初步就创建好了,在share这个类写你需要封装的代码,就可以了<4> 运行生成dll 这个时候运行会有这个提示,可以忽略,点击取消就行。然后...原创 2018-10-22 22:35:46 · 465 阅读 · 0 评论 -
Protobuf 安装与编译(一)
Protobuf 下载地址:https://github.com/protocolbuffers/protobuf/releases我这里下载的是 protobuf-cpp-3.9.2.zip一: 准备CMake 工具.(之前编译过别的代码 有安装过)图 1:\会有以下报错:图2:解决办法:(指定cmake_name_programe 对应的value...原创 2019-10-10 15:12:30 · 559 阅读 · 0 评论 -
c++ 类型转换const_cast<type id>(num);
const_cast(num);他的作用就是把const去掉,让变量可以被修改,但是他们的地址仍然是相关的.直接说正题把.有没有遇到这样的问题,string miss(const string &str,const string &str1){ return (str.size()>str1.size())? str:str2;}你的输入形参是常引用,但是返原创 2017-07-31 22:09:42 · 645 阅读 · 0 评论