摘要:一、converting constructor 不知道为什么,这个名次从来没有听说过,之前也没有关注过C++的这个特性。看了下《The C++ Programming Language》这本书最后的索引,也没有关于这个名词的索引,只是在"constructor"的"and type convers
阅读全文
摘要:一、问题 在编可执行文件的时候,为了图方便,没有使用工程的Makefile,而是自己做了一些特殊的处理,选择性的编译了一部分代码,导致最后调试时发现一些文件访问singleton特定组件时错误,然后就想了下C++对于头文件中定义的static类成员中的static变量是如何实现及保证这个单件的唯一性
阅读全文
摘要:一、问题 在很多的C++容器使用,通常的遍历方法都是 for (auto iter = cont.begin(); iter != cont.end(); iter++) 或者使用更高级的C++语法 for (auto &iter : cont) 但是无论如何,在这种场景下,我们总是假设一个容器的e
阅读全文
摘要:一、模板模板是C++中相对比较不太常见的结构,它实现了一些定义按照使用而动态由编译器实现的功能。或者说它部分实现了一些代码动态生成,将程序员的一些工作转移给了编译器来完成。并且它可以使用和内存的使用一样,只有在真正使用到(需要一种模板定义)的时候,此时才真正生成这种模板的一个实例。这一点和各种现代的
阅读全文
摘要:一、语法语法是一个语言的基础,每个语言都会形式化的定义自己的语法规则,因为现在大部分时候还是“属性文法”,也就是基于语法的语义识别,所以严格的语法对于任何一门语言都是必须的,即使所谓的第四代编程语言SQL语言看起来非常高端,但是事实上它的语法也是有严格规定的,也可以通过语法文件(好像应该叫巴克斯-诺
阅读全文
摘要:一、bool值的范围根据C++语言中的说明,一个bool值可能的值只有两个,要么是0,要么是1。但是对于一个未初始化的bool值变量,它的取值范围却要丰富多彩的多,它的取值范围应该是可以为任意的一个单字节整数。测试的程序非常简单,大家随便打印一下一个未初始化的bool变量的值就应该可以看到各种各样的
阅读全文
摘要:一、memset一个对象这个是一个非常低级的错误,本身大家一看就看到这个代码是错误的,但是如果出现在面试题里,估计很多人会纠结一下,也可能会忽略这个问题。因为之前比较多的是用C语言,所以初始化一个结构的方法就是随手一个飘逸的memset一个结构。但是在C++中,这种方法可能会引起严重问题,特别的就是
阅读全文
摘要:一、gcc对main之前初始化的支持对于变量的初始化,gcc提供了两个相关功能,一个是#pragma init(xxx),另一个是通过__attribute__((constructor))声明的函数。虽然说#pragma这个属性只在soloris系统中有用,但是对于我们研究其实现原理还是很有帮助的
阅读全文
摘要:一、虚函数表的多编译单元定义对于C++来说,它是通过虚函数表来实现自己的多态的,在windows下,C++代码的动态类型识别之类的功能也是和这个虚函数表有关,总之是在这个虚函数表附近。具体是什么布局,我记得《Microsoft Journal》中好像有一系列的文章和图片详细的描述了这个结构,这里我们
阅读全文
摘要:一、局部/全局变量局部变量在C++中的使用要频繁的多,并且功能也强大的多,但是这些强大功能的背后无疑会引入问题的复杂性,不想让马儿吃草只想让马儿跑的事大家表乱想。这些初始化的实现就需要C++的库执行更多的动作来完成,虽然各种编译器都是像如今开展的“学雷锋”活动一样干了很多好事都没有留名,但是作为一个
阅读全文
摘要:一、字符符号这个问题以前知道char类型有默认有符号和无符号的区分,但是这两种区分到底有什么区别,概念还是比较模糊的,直到今天因为字符符号搞了一个大乌龙,搞的版本无法启动,才算是有了一次刻骨铭心的认识。二、比较语句下面是比较的一个模型,gcc中,char类型在i386/MIPS体系结构默认是有符号的
阅读全文
摘要:一、习惯性问题刚从C++转到C开发的时候,觉得C里面一些函数调用不用声明函数原型,也不用定义,当时觉得很神奇。后来在C语言下开发久了,发现调用的函数没有声明导致编译错误,又觉得很神奇。看来很多东西习惯了就见鬼不怪了。二、测试的代码[tsecer@Harry GccTest]$ cat MustDec
阅读全文