c++
c++基础知识研究
整理行囊
时刻反省自己能不能吃这碗饭,程序员存在的使命就是优化,当你学不进去的时候就是该走的时候了。
展开
-
数据成员的访问
成员函数的获取通过偏移原创 2022-07-06 07:34:36 · 306 阅读 · 0 评论 -
VS 内存模型 -- 有意思的模型
测试对象模型里说的,当多个基类时,第一个基类没有虚函数,第二个及以后的基类有虚函数则替换第一个基类。可以减少一个vfptr。这个一开始不理解。后来实测下来突然懂了,他减少的是派生类的vfptr。他将后续的vfptr和派生类可能...原创 2022-06-26 00:07:36 · 150 阅读 · 0 评论 -
有意思的编译器(bar(temp), temp).mem();
xxx原创 2022-06-11 09:24:18 · 75 阅读 · 0 评论 -
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 · 227 阅读 · 0 评论 -
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 · 139 阅读 · 0 评论 -
链接库时动态库和静态库同时存在时,总是动态库被使用
当链库时制定了-static时-l就会默认寻找.a的去链接当链库时使用-Bdynamic时-l就会默认循州.so去链接显然-Bdynamic是默认的。所以你没有制定链接规则时,总是动态库优先被链接。原创 2022-04-30 16:14:11 · 369 阅读 · 0 评论 -
容器就是我的数据结构。迭代器就是我的判断条件,算法就是我的逻辑主干。哈哈就是这样。这个写法就是我的感悟。
(*(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 · 451 阅读 · 0 评论 -
非推断语境分享
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 · 203 阅读 · 0 评论 -
decltype规则(如果你对decltype(i++/++i/(i)/“abcd“)这些感兴趣,那来看看)
文章目录前言一、decltype规则二、规则详解总结前言以前对decltype((i))的会把原本类型改掉,很奇怪,decltype(++i)和decltype(i++),decltype(“sdf”),这都啥啊,为啥会这样呢,除了背下来,感觉没啥办法。你也有这种感觉的话。那正好一起看看。我们聊聊看我分析的对不对。一、decltype规则先贴规则。如果是用户指定标识,就按照这个标识的类型推导。如果不是用户标识,返回值是左值,则推导为左值引用。如果不是用户标识,返回值是将亡值,则推导为右值原创 2022-03-30 00:17:33 · 464 阅读 · 0 评论 -
POD是何物,就是能否兼容C格式。
文章目录前言一、POD概念1. 是否是平凡的。2. 是否是标准布局总结。前言POD是何物,就是能否兼容C格式。一、POD概念相信很多人都遇到过说是非pod类型不能用memset和memcopy。会有问题。为什么会有问题呢。因为这些函数本身即使C语言使用的。因此所谓POD,就是考量能否正确匹配C的格式。因此专家们把C++和C的不同点列出,整理了两个要求。1. 是否是平凡的。这个很好理解,即默认的函数都是默认,没有显示定义。(默认构造,默认拷贝构造,默认移动构造,默认赋值,默认移动赋值,默认析构原创 2022-03-29 23:36:30 · 1210 阅读 · 0 评论 -
stl空间分配器
原创 2022-03-13 22:54:05 · 558 阅读 · 0 评论 -
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 · 2151 阅读 · 0 评论 -
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 · 220 阅读 · 0 评论