
C/C++基础
文章平均质量分 93
shenxiaolong_code
enjoy C++ and meta-programming, form STL to MPL
展开
-
g++ 编译器模板解析近似缺陷的限制(C++标准议论)
g++ 编译器对复杂模板的支持非常有限,这儿记录一个g++对C++模板解析近似bug的限制。原创 2024-08-29 11:23:39 · 822 阅读 · 0 评论 -
利用编译期函数构建又快又小的程序
论证用C++模板元技术来优化二进制模块大小(binary size optimize)的原理与技术实践,并且提高运行时性能,构建又快又小的程序原创 2024-08-02 13:29:22 · 593 阅读 · 0 评论 -
内部链接(internal linkage)和外部链接(external linkage)
内部链接(internallinkage)/外部链接 (externallinkage)是和编译单元(translation unit)相关的一个术语,其主要影响函数或者对象的作用域及存储方式—是全局只存储一个,还是全局有许多量的副本。具有externallinkage的变量可以被其它源文件使用,整个程序内有效,并且全局只有一个。具有internallinkage的变量只能被本transl原创 2013-10-10 10:23:12 · 5464 阅读 · 3 评论 -
typeid及RTTI
C++中类型识别符typeid分静态识别和动态识别。静态识别是指在编译阶段进行的识别,动态识别是指在运行阶段进行的识别。只有动态识别需要RTTI的支持,但是RTTI是否打开不影响编译链接,只影响运行结果是否正确。 typeid的工作原理:1. typeid是依赖于保存在虚函数表里面的type_info块来获取真实对象信息的。而如果基类没有任何虚函数的话,typeid就原创 2013-10-10 10:27:49 · 1543 阅读 · 0 评论 -
结构体对齐规则
结构体对齐 , #pragma pack(4),结构体的长度(sizeof)(一个没有考虑周详的位段结构体中,可能存在大量“缝隙”)1. 对齐规则1. 实际对齐值决定系统一次划分内存的字节数量。系统为变量分配内存时,必须先划分够变量数据类型需要的对齐空间(对齐模数,字节单位)。2. 结构体的实际对齐值为结构体中最大的数据类型的长度A与系统规定的原创 2013-10-10 10:51:19 · 1187 阅读 · 0 评论 -
避免创建不必要的大对象(把大对象转换为小对象)
在模板函数中,很多情况下,我们仅仅需要一个对象的类型,而并不需要这个对象的实体,例如: templatetypenameT>void HandObject(){ couttypeid(T).name() <<endl;} 在调用时,用户必须明确地指定模板类型:HandObjectbigObject>();很多时候,用户并不喜欢这原创 2013-10-24 16:58:51 · 1278 阅读 · 0 评论 -
产生及判断NaN及INFINITE数值
本人工作中经常需要用到NaN及Inf浮点数,原来使用是IBM公司封装的CDecfloat数据类型,后来发现这个数据类型的许多缺点:1. 数据类型size太大,浪费内存:这个数据类型用来表示浮点数,在x86 32位机器上竟然需要100多个字节。 (浮点数只需要4字节啊,IBM的大神们)2. 操作效率低下,来回和string相倒换,有时候完全没有必要。3. rescale后,原有的数值原创 2013-12-02 13:00:50 · 12315 阅读 · 0 评论 -
这是vs2008编译器的一个bug么?
在vs2008中测试如下代码:struct tagS{};bool VSBug(tagS const& l, const tagS r){ return true;}templatevoid showType(T f){ cout }void main() { showType(VSBug);原创 2014-01-16 20:36:50 · 858 阅读 · 0 评论 -
命名空间及匿名命名空间
把命名空间单独提出来描述是因为:命名空间的功能几乎和前缀是一致的。1. 使用命名空间的必要性 在一个大的项目中,当多时合作时,多个人编写的库头文件中,不可以避免的存在变量名相同的冲突,特别都是作为全局变量存在的时候,这种冲突就更为明显,如何解决这种冲突?方法就是使用命名空间。 比如说,每个人所定义的变量,都以他自己的名字的缩写为前缀,假如...原创 2013-10-10 10:44:11 · 8037 阅读 · 3 评论