C/C++
luchengbiao
这个作者很懒,什么都没留下…
展开
-
2020-10-10
vs-stl实现中 std::unordered_map计算哈希值:size_type _Hashval(const key_type& _Keyval) const{ // return hash value, masked to current table size return (_Traitsobj(_Keyval) & _Mask); // size_type _Mask; // the key mask : _Mask = _Buckets ...原创 2020-10-10 16:05:10 · 247 阅读 · 0 评论 -
FFmpeg没有生成blackframe avfilter的解决方法
原创 2020-06-15 15:02:21 · 418 阅读 · 0 评论 -
stl 二分查找api lower_bound upper_bound binary_search
STL中关于二分查找的函数有三个lower_bound 、upper_bound 、binary_search 。这三个函数都运用于有序区间(当然这也是运用二分查找的前提),下面记录一下这两个函数。ForwardIter lower_bound(ForwardIter first, ForwardIter last,const _Tp& val)算法返回一个非递减序列[first, l...转载 2019-01-29 14:53:53 · 151 阅读 · 0 评论 -
子类隐藏父类的公共方法
class QPostEventList : public QVector<QPostEvent>{。。。private: //hides because they do not keep that list sorted. addEvent must be used using QVector<QPostEvent>::append; us...原创 2019-01-29 14:46:56 · 1311 阅读 · 0 评论 -
C++11 lambda编译器实现为函数对象,编译器自动生成相应的函数对象类,捕获列表即时函数对象类的数据成员(即闭包的状态)
C++11 lambda编译器实现为函数对象,编译器自动生成相应的函数对象类,捕获列表即是函数对象类的数据成员(即闭包的状态)https://blog.csdn.net/freshui/article/details/55098799...原创 2019-01-18 14:41:09 · 248 阅读 · 0 评论 -
C 之 void *realloc(void *mem_address, unsigned int newsize)
例如有 void* old_addr = ...; unsigned int old_size = ...; void* new_addr = realloc(old_addr, new_size)1 返回值new_addr不为NULL的情况: 1)old_addr != NULL && new_size < old_size:紧缩并释放后面的部分(new_...原创 2019-03-14 10:15:16 · 296 阅读 · 0 评论 -
C++ 模板的 实例化 和 [偏]特化
最近看了看到了模板的特化,突然想起来上说的显式具体化、隐式具体化、特化、偏特化、具体化等概念弄得头晕脑胀,我在网上了找了好多帖子,才把概念给理清楚。一下是我把再网上找的资料整理一下。看着这么多叫法,其实就是三种。1. 显示实例化2. 隐式实例化3. 特化(=具体化)、偏特化一、实例化1.显示、隐式实例化什么是实例化:一个通过使用具体值替换模板参数,从模板产生的普通类...转载 2019-03-13 09:47:10 · 639 阅读 · 0 评论 -
Qt 线程安全类,可重入类,不可重入类
1、线程安全类:不同线程对同一个类的对象进行操作,例如在不同线程调用同一个对象的类成员函数,是安全的,互不妨碍的,则说明该类是线程安全的,Qt中线程安全的类有QMutex、QMutexLocker、QReadWriteLock、QReadLocker、QWriteLocker、QSemaphore、QThreadStorage<T>以及QWaitCondition;2、可重入...原创 2019-04-11 15:05:21 · 1304 阅读 · 1 评论 -
c++无类型参数模板(non-type template parameter)
a non-type template-parameter shall have one of the following types(无类型模板参数应该是下面所列举的类型):1. integral or enumeration type(整型 或者 枚举)2. pointer to object or pointer to function(对象的指针或函数指针,其实还包括基本类型的指针)...原创 2019-04-08 14:22:22 · 1049 阅读 · 0 评论 -
std::shared_ptr所管理对象的析构问题
直接上代码:#include "stdafx.h"#include <memory>class Base{ // 没有虚析构函数};class Derived : public Base{public: Derived() = default; Derived(int int_) : i_(int_) {} ~Derived()...原创 2019-05-31 17:05:10 · 2333 阅读 · 0 评论 -
vs下支持静态变量的线程安全初始化
// Control access to the initialization expression. Only one thread may leave// this function before the variable has completed initialization, this thread// will perform initialization. All oth...原创 2019-06-24 14:09:59 · 694 阅读 · 0 评论 -
alive_ptr 用于独立的判断原始指针是否有效(存活)的智能指针
#ifndef ALIVE_PTR_H_INCLUDED#define ALIVE_PTR_H_INCLUDED#include <atomic>namespace alive{ template<typename T> struct alive_ref { inline ~alive_ref() {} i...原创 2018-12-25 15:50:48 · 340 阅读 · 0 评论 -
std::future std::promise std::packaged_task std::async
std::promise std::packaged_task std::async 通过 std::future 异步返回结果值或异常 std::promise<value_type>:直接通过 std::promise<value_type>::set_value或std::promise<value_type>::set_exception返回结...原创 2018-12-24 18:29:54 · 188 阅读 · 0 评论 -
std::enable_if
enable_if 的主要作用就是当某个 condition 成立时,enable_if可以提供某种类型。enable_if在标准库中通过结构体模板实现的,声明如下:template<bool Cond, class T = void> struct enable_if;1英文解释如下: Enable type if the condition is met. The type ...转载 2018-06-29 10:28:22 · 2018 阅读 · 0 评论 -
windbg-跳过初始断点(调试技巧)
ntdll!LdrpDoDebuggerBreak+0x2c: 7757054e cc int 3 0:000> kv ChildEBP RetAddr Args to Child 0030f3c8 77550e00 7ffdf000 7ffd3000 775a714c ntdll!LdrpDoDebuggerBreak+0x2c (FP...转载 2018-08-31 16:43:59 · 845 阅读 · 0 评论 -
setlocale 多线程调用引发程序crash
最近的一个项目,由于要读写中文文本,所以使用了以下代码: char* old_locale = _strdup(setlocale(LC_CTYPE, NULL)); setlocale(LC_CTYPE, "chs"); CStdioFile file; //CFile::modeCreate:以新建方式打开,如果文件不存在,新建;如果文件已存...转载 2018-07-17 19:44:25 · 902 阅读 · 0 评论 -
moc文件生成方法,qt找不到moc_**.cpp
Qt 程序在交由标准编译器编译之前,先要使用 moc 分析 C++ 源文件。如果它发现在一个头文件中包含了宏 Q_OBJECT,则会生成另外一个 C++ 源文件。这个源文件中包含了 Q_OBJECT 宏的实现代码。这个新的文件名字将会是原文件名前面加上 moc_ 构成。这个新的文件同样将进入编译系统,最终被链接到二进制代码中去。因此我们可以知道,这个新的文件不是“替换”掉旧的文件,而是与原文件一起...转载 2018-07-20 10:26:59 · 13668 阅读 · 0 评论 -
CRTP: Curiously Recurring Template Pattern
Curiously recurring template patternFrom Wikipedia, the free encyclopedia (Redirected from Curiously Recurring Template Pattern)Jump to navigation Jump to searchThe curiously recurring templa...转载 2018-08-30 18:32:14 · 207 阅读 · 0 评论 -
windows下 编译Chromium遇到的问题
1 找不到D3Dcompiler_47.dll2 找不到uiviewsettinginterop.h这个头文件,下载最新的windows 10 sdk3 CLIENT_ID redefined; 与winternal.h的CLIENT_ID冲突,注释掉chromium的那一行 struct CLIENT_ID;4 mc.exe mt.exe midl.exe 不是内部或外部的命令; 从...原创 2018-08-31 16:42:46 · 785 阅读 · 0 评论 -
AOP C++通用模板实现
has_member.h:#ifndef __AOP_SRC_HAS_MEMBER_H__#define __AOP_SRC_HAS_MEMBER_H__#include <type_traits>#define HAS_MEMBER_FUNCTION(member) \template<typename T, typename ... Args> \str...原创 2018-10-19 11:46:40 · 497 阅读 · 0 评论 -
Qt点滴 eventFilter
原创 2018-11-05 17:37:16 · 116 阅读 · 0 评论 -
VS2013中 模板递归实例化的最大深度:499
原创 2018-11-08 13:59:12 · 360 阅读 · 0 评论 -
std::priority_queue 和 std::set(或std::map)的区别
std::priority_queue:是一个容器适配器(container adaptor),行为和heap一样(内部增删操作时也是通过std::make_heap等来维护元素顺序的);但是对所适配的容器有诸般要求:1 支持随机访问元素(random access),形如std::vector, std::deque; std::priority_queue默认使用的就是std::vect...原创 2018-11-14 09:30:03 · 1509 阅读 · 0 评论 -
std::initializer_list<QString> 崩溃问题
发现使用std::initializer_list<QString>时,会造成程序崩溃,貌似是堆栈破坏,猜测和QString的数据隐式共享机制有关,但具体原因还未定位,测试代码如下,期待解答:#include "qstring_initializer_list_test.h"#include <QtWidgets/QApplication>#include <v...原创 2018-12-26 17:26:40 · 699 阅读 · 0 评论 -
Qt 鼠标透传属性 WA_TransparentForMouseEvents
setAttribute(Qt::WA_TransparentForMouseEvents) void QWidgetWindow::handleMouseEvent(QMouseEvent *event){..............}原创 2018-12-21 19:14:36 · 6536 阅读 · 0 评论 -
数组的粒度问题
在C中,在几乎所有使用数组的表达式中,数组名的值是个指针常量,也就是数组第一个元素的地址。 它的类型取决于数组元素的类型: 如果它们是int类型,那么数组名的类型就是“指向int的常量指针“。 在以下两种场合下,数组名并不是用指针常量来表示,就是当数组名作为sizeof操作符和单目操作符&的操作数时。 sizeof返回整个数组的长度,而不是指向数组的指针的长度。 取一个数组转载 2017-07-26 20:14:32 · 172 阅读 · 0 评论