- 博客(73)
- 资源 (8)
- 收藏
- 关注
原创 制定计划,才能有目的的走的更远
最近买了很多,也看过很读书,但是都没什么整理,有目的的学习总感觉差点意思,但是有意思的地方不记录时间久了就容易忘记。因此决定还是要稍微整理一下,不做笔记,单纯想谈谈感悟。
2023-09-17 23:25:01 102
原创 VS 内存模型 -- 有意思的模型
测试对象模型里说的,当多个基类时,第一个基类没有虚函数,第二个及以后的基类有虚函数则替换第一个基类。可以减少一个vfptr。这个一开始不理解。后来实测下来突然懂了,他减少的是派生类的vfptr。他将后续的vfptr和派生类可能...
2022-06-26 00:07:36 193
原创 result_of等价于decltype(declval<Fun>()(declval<Args>()...))等价于decltype((*(Fun*)0)((*(Args*)0)...))
#include <iostream>#include <type_traits>using namespace std;template< class Fun, class...Args >auto fun(Fun&& f, Args&&...args) -> decltype(f(args...)){ return f(std::forward<Args>(args)...);}template&l
2022-05-03 12:50:29 274
原创 enable_if < I < tuple_size<Tuple>::value >::type
学到了,利用tuple解析可变值。#include <iostream>#include <tuple>#include <type_traits>using namespace std;template < size_t I = 0, class Tuple>typename enable_if < I == tuple_size<Tuple>::value >::type println(Tuple t){ co
2022-05-02 09:25:48 180
原创 链接库时动态库和静态库同时存在时,总是动态库被使用
当链库时制定了-static时-l就会默认寻找.a的去链接当链库时使用-Bdynamic时-l就会默认循州.so去链接显然-Bdynamic是默认的。所以你没有制定链接规则时,总是动态库优先被链接。
2022-04-30 16:14:11 423
原创 容器就是我的数据结构。迭代器就是我的判断条件,算法就是我的逻辑主干。哈哈就是这样。这个写法就是我的感悟。
(*(insert(value_type(k,T())).first)).second鬼才用法啊,map下标去值方法。利用insert特性,key有点话就插入失败,返回插入失败那个迭代器位置,没有的话,就插入个默认值。insert(value_type(k,T()))insert(value_type(k,T())).first 取得返回值是个迭代器*(insert(value_type(k,T())).first)取得迭代器里数据的类型。(*(insert(value_type(k,T()))
2022-04-30 15:57:02 491
原创 非推断语境分享
template<class T = int>T fun(typename MyStruct<T>::type t, T = 0){ return t;}int main(){ fun(1.3); fun(1.3, 1.3); return 0;}知识点:非推断语境:想屏蔽函数推导就利用typename重新对模板类型进行重置。T=0,默认值写法,其实很常见enable_if<true, int>::type=0;enable_if<
2022-04-23 21:06:56 246
原创 学习不是一簇而就,而是细水长流
最近越发觉得,每日进步一点即可。戒躁。工作中问题一直存在,生活中欲望一直存在,工作中做不完的需求,生活中满足不了的欲望。或许什么都不重要,什么都重要,工作中不能完成指定的需求,就会面临被开除,生活中不能满足自己的欲望,那你活着干嘛,又不是机器。买了很多书,一本都没看,买了很多课,一节都没上。每天重复每天。天天工作抱怨怎么这么多事,想学习。天天回家看剧抱怨怎么这么多东西还要学,什么时候能进步,焦躁。其实追根,就是时间管理有问题,工作也快一年了,但是毫无进步,除了会甩锅啥也不是。工作忙也罢,生活难也罢。越发
2022-04-16 13:28:12 685
原创 decltype规则(如果你对decltype(i++/++i/(i)/“abcd“)这些感兴趣,那来看看)
文章目录前言一、decltype规则二、规则详解总结前言以前对decltype((i))的会把原本类型改掉,很奇怪,decltype(++i)和decltype(i++),decltype(“sdf”),这都啥啊,为啥会这样呢,除了背下来,感觉没啥办法。你也有这种感觉的话。那正好一起看看。我们聊聊看我分析的对不对。一、decltype规则先贴规则。如果是用户指定标识,就按照这个标识的类型推导。如果不是用户标识,返回值是左值,则推导为左值引用。如果不是用户标识,返回值是将亡值,则推导为右值
2022-03-30 00:17:33 588
原创 POD是何物,就是能否兼容C格式。
文章目录前言一、POD概念1. 是否是平凡的。2. 是否是标准布局总结。前言POD是何物,就是能否兼容C格式。一、POD概念相信很多人都遇到过说是非pod类型不能用memset和memcopy。会有问题。为什么会有问题呢。因为这些函数本身即使C语言使用的。因此所谓POD,就是考量能否正确匹配C的格式。因此专家们把C++和C的不同点列出,整理了两个要求。1. 是否是平凡的。这个很好理解,即默认的函数都是默认,没有显示定义。(默认构造,默认拷贝构造,默认移动构造,默认赋值,默认移动赋值,默认析构
2022-03-29 23:36:30 1313
原创 map和unordered_map的自定义key。
知识点利用lambda可以替换仿函数。map自定义类型,需要类内重载<或者类外指定一个仿函数比较大小,默认定义的是小的概念。unordered_map自定义类型,1、需要类内重载==用于解决哈希冲突时的具体比较或类外可以利用仿函数定义等于概念。2、需要指定散列函数,使用c++自定义的hash即可。std::hash()(num);这个时c++仿函数的用法,利用std::hash()申请一个临时的对象xxx,然后xxx()调用类内operator(),类似函数用法。注意点:使用lambda
2022-03-13 11:03:52 2209
原创 static void (* set_malloc_handler(void (*f)()))() 高级高级学到了
static void (* set_malloc_handler(void (f)()))()解析:static void ( set_malloc_handler(void (f)()))()退化来看static void ( x)()1. x是一个不需要参数返回值时void的一个函数指针。即x = void ()也就是set_malloc_handler(void (*f)() = void ()得知set_malloc_handler 的返回值时void拆出来看2. set_mal
2022-03-12 22:40:10 246
原创 判断是否是函数类型(学习到了函数和引用没法被const修饰,重新复习了下顶层const和底层const)
//是否是const类型利用特化是实现template <class>_INLINE_VAR constexpr bool is_const_v = false; // determine whether type argument is const qualifiedtemplate <class _Ty>_INLINE_VAR constexpr bool is_const_v<const _Ty> = true;template <class _
2022-02-16 00:19:25 197
原创 -----------------
判断是否是enum类型,且不能转化为int类型。(enum class的实现。强类型匹配,不能隐士转化)template <bool _First_value, class _First, class... _Rest>struct _Conjunction { // handle false trait or last trait using type = _First;};template <class _True, class _Next, class... _Re
2022-02-15 00:26:13 229
原创 type_traits--3
文章目录一、源码二、源码解析1.remove_extent:移除数组的第一层维度2.remove_all_extents: 移除所有数组维度3.remove_pointer: 移除指针类型4.add_pointer : 添加指针类型5.is_array: 判断是否是数组类型6.is_reference:是否是引用类型。is_lvalue_reference: 左值引用,is_rvalue_reference: 右值引用7.is_pointer: 是否是指针类型8.is_null_pointer: 判断指针是
2022-02-13 21:27:26 390
原创 type_traits-_Add_reference解析(void_t类型的使用,declval解析)
文章目录前言一、源码二、解析1.源码解析2.测试demo前言根据源码看要是传入左值引用的话即便调用返回右值返回的依旧是左值。(这部分真的理解不了,我找了好久也不知道为啥如此设计。我看源码一直以为自己理解错误了,我一直以为他是可以将引用擦除掉的。我还特意以为void_t可以类型擦除(我以为void_t<T&>里可以匹配到左值然后把他擦除掉。),说来可笑,这几天一直找原因。还以为我之前学习的模板类型推导理解出现了问题导。特意把之前的又都梳理了一下。后来本地demo测了一下。无语了。他就是
2022-02-13 01:19:27 676
原创 --------------
void_t作用:就是判断类型能被生成类似:enable_iftemplate <bool _Test, class _Ty = void>struct enable_if {}; // no member "type" when !_Testtemplate <class _Ty>struct enable_if<true, _Ty> { // type is _Ty for _Test using type = _Ty;};template
2022-02-12 02:48:23 176
原创 ---------
类型擦除条件。测试发现可以通过特化方式将类型擦除,但是仅限单个参数时可以实现,猜测因为多个参数时不知道以谁为主,因此就保存了传入的类型。测试demo如下。#include <iostream>#include <xtr1common>using namespace std;namespace xxx{ template<class T> struct MyStruct { MyStruct() {
2022-02-11 00:54:01 261
原创 -------
//满足参数至少两个时才会被选择。当满足参数至少两个2个时第一个参数为true就会被选择。或者只有两个参数,因为下边偏特化版本需要三个参数。template <bool _First_value, class _First, class... _Rest>struct _Conjunction { // handle false trait or last trait using type = _First;};//对上一个进行了偏特化。偏特化出第三个参数和第一个参数是true。
2022-02-10 00:05:16 228
原创 type_traits-integer_sequence解析(继承方式添加可变参数)
文章目录前言定义以及使用一、integer_sequence源码二、使用步骤1.全部解析2.重点解析1. 递归调用自身的模板思想2. integral_constant存在的必要性。总结前言对之前所学进行检验。从源码中学习如何使用模板。定义以及使用integer_sequence:判断是否是整数类型,不是则编译失败(利用静态断言),是则保存自身类型和传入的的整形类型,以及保存可变参数的长度。index_sequence_for:生成指定大小的integer_sequence类型。例如in
2022-02-09 00:17:12 502
原创 带你走进模板编程基础2
文章目录前言一、源码二、源码解析1. remove_const:移除const标志2. remove_volatile:去除volatile(感觉没咋用到过的关键字,只是了解不让编译器优化),和const那个使用方式是一样的,利用特化提取了关键字,重新制定了类型3. remove_cv:去除const和volatile属性4. _Disjunction:(感觉咋描述都不清晰)5. disjunction:对_Disjunction不规格数据的过滤,利用继承方式去提取可变参数。6. _Is_any_of_v
2022-02-08 01:15:08 1079
转载 模板编程-可变参数
文章目录前言一、可变参数定义二、可变参数个数求取三、可变参数模板函数提取1.递归处理,每次提取一个。2. 逗号表达式方式去展开(很强的想法)三、可变参数模板类提取1.递归处理,每次提取一个。(特化最后的结果)2. 继承方式提取可变参数总结前言之前一直没有想法去了解可变参数,因为知道大概原理,就懒得了解细节了,今天偶然下发现了一篇写的很具参考意义的文章,就想着搬运一下。搬运地址https://www.cnblogs.com/qicosmos/p/4325949.html一、可变参数定义type
2022-02-07 18:02:34 259
原创 模板编程基础 -(模板类型class和typename区别,模板模板参数)
文章目录前言一、可变参数的使用前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结二、class和typename区别三、模板模板参数总结前言学习模板编程总能看到可变参数,但是一直没有想学习和整理下,直到碰到了有篇写的很好的文章,我正好整理+学习过来。可变参数参考地址模板类型参考地址模板模板参数参考地址https://www.cnblogs.com/qicosmos/p/4325949.htmlhttps://blog.csdn.net/qq_45801299/article/
2022-02-07 00:10:58 1833
原创 move和forward为什么使用方式不同(聊聊forward为什么不让右值以左值的形式转出)
文章目录前言一、move和forward哪里不同,为什那么不同?1.哪里不同2.为什么不同二、为什么forward需要设计两个函数,我认为一个函数就够1.假如forward只有一个函数。2.为什么设计两个函数总结前言我之前提出过问题move和forward为什么使用方式不同,以及哪里不同。一下就会解释。一、move和forward哪里不同,为什那么不同?1.哪里不同使用方式,发现了吧move不需要制定类型,forward使用的时候需要制定类型才能使用。源码里实现方式不同,move只需要一个强转
2022-02-05 14:21:38 1386
原创 带你走进模板编程基础
文章目录前言一、部分源码二、详解1.各种宏定义的作用和使用2.源码解读3.模板代码欣赏(标签分发-解决函数无法重载)总结前言想要了解模板编程,肯定绕不过如下基础判断模板。一、部分源码// xtr1common internal header (core)// Copyright (c) Microsoft Corporation.// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception#pragma once#ifndef _X
2022-02-05 01:12:29 1158
原创 模板匹配规则
模板类型推导规则模板层面先进行比较然后才是特化层面在进行比较。如下图所示(输出b的函数图1是a的全特化,图2是c的全特化,开始匹配都是模板层面先进行匹配,图1输出c,a和c比较c最为相似,c没有特化输出c。图2输出b,a和c比较c最为相似,c有特化是b,输出为b)函数不支持偏特化(和函数重载规则有混淆,因此被禁止)可以看一下以下文章学习下,如何利用1. 模板类实现函数重载 2. 标签分发。点击跳跃https://zhuanlan.zhihu.com/p/268600376?utm_sourc
2022-02-04 00:41:30 466
原创 入门模板编程-forward和move
文章目录前言一、左值和右值二、左值引用,右值引用,万能引用1.左值引用2.右值引用3.万能引用与引用折叠三、forward和move1.forward2. move四、走进forward和move模板编程1. remove_reference引用类型擦除函数2.模板类型推导3.引申 - 萃取(type_traits)总结前言forward和move绝对是你想理解模板编程的第一步。从forward和move入手可以对模板编程快速了解。也会对c++11模板编程越来越痴迷,真的是鬼才的设计。一、左值和右值
2022-02-02 17:43:52 1481 1
原创 每日整理-优雅的编程习惯
do while(0)的使用作用:循环内处理逻辑,循环外统一处理错误。当发生错误可以随时跳出,减少重复代码。enum class test { unKnow = 0, loadError = 1 };bool isReal(test nNum){ //_Log_Debug("in isReal"); bool bRet = false; std::string message; do { if (nNum == test::unKnow).
2022-02-02 01:10:03 101
原创 新的改变就从新年的第一天开始
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar
2022-02-01 11:55:45 422
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人