随笔分类 -  C/C++基础

1 2 下一页

一个类只有一张虚表吗
摘要:intro 毫无疑问,每个对象只有(最多)一个虚函数表指针,但是每个类是否只有一个虚函数表呢? 从两个比较常用的C++功能可以引申到这个疑问: 虚函数调用 一个派生类对象转换为基类指针后,通过该基类指针来调用虚函数,调用到的是派生类的虚函数。这个通过虚函数表很容易实现,但是调用虚函数的时候不仅仅是找 阅读全文

posted @ 2024-11-23 18:08 tsecer 阅读(31) 评论(0) 推荐(0) 编辑

C++中promise和future初认识
摘要:future/promise future提供了一个基于数据(future模板类型)的异步概念:对于一个类型T,可以在以后通过get接口获得这个类型T的变量。或者打个不太恰当的比方,当你获得一个future对象时,就获得了一个消费券(consumer):拿着这张券可以兑换(get)一个T类型的结果( 阅读全文

posted @ 2024-02-04 19:33 tsecer 阅读(477) 评论(0) 推荐(1) 编辑

引用在模板推导中的基础逻辑
摘要:reference 引用是C++相对于C语言指针引入的一个新语法,可以以简单变量来使用指针。这种语法在使用的时候还是比较方便的,但是也在模板类型推导的过程中也带来了一些需要额外关注的细节。 例子 下面的例子中,rt是一个引用类型,问题是在模板参数函数Harry的定义中,模板参数TSECER并没有包含 阅读全文

posted @ 2023-05-12 19:35 tsecer 阅读(68) 评论(0) 推荐(0) 编辑

常见的hash数据结构
摘要:遍历 hash表是一种比较简单和直观的数据结构,在查找时也有很好的性能。但是hash表不能提供有序遍历,这个是其特性决定,所以不足为奇。但是,更为实际的一个问题是如果遍历整个hash表中的所有元素? 直观上讲,可以遍历一个hash的所有桶(bucket),但是这样明显效率偏低,特别是如果hash表为 阅读全文

posted @ 2022-10-30 11:14 tsecer 阅读(130) 评论(0) 推荐(0) 编辑

从YouCompleteMe无法包含stdlib.h看include_next指示及isystem选项
摘要:一、问题的原因 也不知道是更新gcc版本的原因,还是由于代码修改包含了特殊头文件,导致在新的环境中YouCompleteMe插件(以后简称为ycm)无法进行智能提示,即使对于最简单基础的vector等容器也识别错误,这个对于这么一个杀手级的应用来说就太不应该了。关键是这样就导致整个开发环境的使用就很 阅读全文

posted @ 2021-02-01 19:26 tsecer 阅读(989) 评论(0) 推荐(0) 编辑

C++中引用转发、引用折叠及move、forward函数
摘要:一、reference forwarding(引用转发)gcc实现及C++标准的规定 gcc-4.8.2\gcc\cp\pt.c/* Adjust types before performing type deduction, as described in [temp.deduct.call] a 阅读全文

posted @ 2020-12-26 15:24 tsecer 阅读(728) 评论(0) 推荐(0) 编辑

从lambda的capture语义看gcc名字查找
摘要:一、问题的引入 对于lambda表达式的capture内容,比较知名的是capture-default,也就是通过“&”或者“=”引导的缺省捕捉,通常的做法大家应该都是使用"&"以引用的形式引入。但是如果捕捉内容为空时,此时语法如何处理?从文档上看,如果是global/tatic/thread/co 阅读全文

posted @ 2020-10-23 20:43 tsecer 阅读(373) 评论(0) 推荐(0) 编辑

delete operator是否可以为虚函数
摘要:一、为什么会考虑这个问题 假设框架提供一种机制,这种机制对于处理之后的所有对象都会执行释放(delete)操作,但是对于一些存在于内存池中的结构,如果使用默认delete操作就会有问题,因为默认的delete操作是把指定内存当做堆中空间操作的,所以对于位于内存池中的类型就需要考虑是不是需要重载自己的 阅读全文

posted @ 2020-10-19 21:20 tsecer 阅读(185) 评论(0) 推荐(0) 编辑

从operator new看C++操作符重载
摘要:一、gcc对于new operator的说明 主要是说明:new操作在语法逻辑上看是在new之后一定要看到“类型”的,举个简单的例子:字面量100是一个常量而不是类型,所以语法 new (100)是语法错误的。 /* Parse a new-expression. new-expression: : 阅读全文

posted @ 2020-06-08 20:40 tsecer 阅读(623) 评论(0) 推荐(0) 编辑

关于C++中constexpr的说明
摘要:一 、为什么需要constexpr 有时候需要编译时常量,现在能想到的典型的场景是在确定一个数组长度的声明中。比方说,需要64个bit,也就是8个字节,在32位机器上,需要两个long,在64位机器上需要一个long。那么此时的声明大概可能是long bits[sizeof(long) == 32 阅读全文

posted @ 2020-05-07 20:05 tsecer 阅读(3503) 评论(0) 推荐(0) 编辑

C++的trivial destructor和value initialization
摘要:一、标量类型的析构 下面是一种简化的模型,实际项目中通常对应着缓存区结构,可能会主动调用析构函数,但是这种类型不排除有标量类型的情况。下面的例子中是int类型,但是事实上可能更多的是一种指针类型,那么指针类型主动调用析构会清零吗?tsecer@harry: cat exp.call.dtor.cpp 阅读全文

posted @ 2020-04-27 20:36 tsecer 阅读(571) 评论(0) 推荐(0) 编辑

被忽略的class“特殊成员”—转换函数
摘要:一、operator的重载 这个关键字平时其实几乎不怎么使用,但是偏偏这个关键字和new/delete之类比较孤僻的关键字还经常一起出现,使整个情况看起来更加诡异。之前应该是在看C++ stl库中看到过在类成员中自定义转换函数的,就是希望让一个对象可以转换为bool类型(通常用在if之类的逻辑表达式 阅读全文

posted @ 2020-03-24 12:52 tsecer 阅读(414) 评论(0) 推荐(0) 编辑

C++风格cast的优先级
摘要:一、为什么注意到这个问题 之前在使用C风格的cast时候,一个比较烦的地方就是由于转换操作的优先级,导致转换出来的类型需要使用额外的一个括号抱起来,看起来非常臃肿。后来注意到在C++风格的转换符貌似优先级更高,虽然输入量有所增加,但是输入的时候比较流畅,因此看起来也更加流程。tsecer@harry 阅读全文

posted @ 2020-03-20 16:50 tsecer 阅读(502) 评论(0) 推荐(0) 编辑

C++中模板特殊化(speicialization)的偏序关系及make规则选择
摘要:一、Makefile中的匹配 在Makefile中,可以通过不同的pattern指定不同目标的执行规则,在这个时候就会存在一个哪个target更合适的问题。这里Makefile中引入的是一个stem的概念,从stem中选择最短的。gnu make对该规则的说明A target pattern is 阅读全文

posted @ 2020-01-18 11:31 tsecer 阅读(625) 评论(0) 推荐(0) 编辑

析构函数、多线程及进程退出
摘要:一、主要的问题 这里主要讨论的是C++中全局/静态局部对象析构函数的执行时机问题。我们知道:全局变量的初始化时在main函数执行之前完成,静态局部变量的初始化是在首次执行到所在函数时执行。但是这些对象的析构函数在什么时候执行,它们在多线程中的表象又是如何?下面首先看下例子:tsecer@harry: 阅读全文

posted @ 2020-01-14 20:36 tsecer 阅读(2933) 评论(0) 推荐(0) 编辑

C++中lambda的应用场景及编译器实现原理
摘要:一、使用场景 1、局部函数的需求场景及限制 在标准C++(C++11之前)中,是没有局部函数这种语法的。但是在有些场景下,使用局部函数可以极大的简化代码,比方说,输入参数是一个圆(由圆心和半径表示),判断给定的两个点,是否一个在圆外部,一个在内部,此时最好有一个判断一个点是否在圆形内部的函数接口,然 阅读全文

posted @ 2020-01-06 18:47 tsecer 阅读(1467) 评论(0) 推荐(0) 编辑

C语言中浮点数定义和文本处理的配合
摘要:零、C语言中float类型变量定义的诡异性 在C语言中,float类型的定义比较特殊,特别是对于小数点左右侧数字的定义看起来也比较诡异:例如这种".005","10."等类型,问题是这种节省一个数字0,让浮点数看起来非常诡异的意义在哪里?不是不允许这种奇形怪状的定义,让浮点数看起来更加规范它不香吗? 阅读全文

posted @ 2019-12-14 11:31 tsecer 阅读(1052) 评论(0) 推荐(0) 编辑

C++11中部分新语法说明
摘要:一、变长模版参数(variadic template paramter) 1、语法说明 gcc源代码中对于该语法的解析是在gcc-4.8.2\gcc\cp\parser.c文件中完成,同样是"...",如何区分哪些是pack,哪些是expansion呢?从代码(的注释)上来看,只有在模版声明temp 阅读全文

posted @ 2019-03-07 10:37 tsecer 阅读(252) 评论(0) 推荐(0) 编辑

c++动态库中对于字符类型变量的格式化处理
摘要:一、问题 在使用stringstream对一个变量进行格式化的时候,发现格式化之后的字符串并不是一个可显示的字符,最后看了半天,发现问题在于这个变量定义的类型是char类型,导致格式化之后数值本身并没有变化。我记得这个问题甚至不是我第一次遇到,这个问题本身是一个很小的问题,但是既然几次遇到都没有什么 阅读全文

posted @ 2019-03-07 10:36 tsecer 阅读(261) 评论(0) 推荐(0) 编辑

从tr1的function看conversion operator
摘要:一、为什么考虑到这个问题 在看std::tr1的function实现时,看到一个问题。比方说在C++中可以通过指针获得一个变量的位置 tsecer@harry: cat function.cpp #include <tr1/functional> using namespace std::tr1; 阅读全文

posted @ 2019-03-07 10:35 tsecer 阅读(295) 评论(0) 推荐(0) 编辑

1 2 下一页

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示