C++语言基础
Rachelint
不切实际的愉悦犯。
展开
-
C++成员函数在内存中的存储方式
原文:https://blog.csdn.net/fuzhongmin05/article/details/59112081用类去定义对象时,系统会为每一个对象分配存储空间。如果一个类包括了数据和函数,要分别为数据和函数的代码分配存储空间。按理说,如果用同一个类定义了10个对象,那么就需要分别为10个对象的数据和函数代码分配存储单元,如下图所示。能否只用一段空间来存放这个共同的函数代码段,在调用各对象的函数时,都去调用这个公用的函数代码。如下图所示。显然,这样做会大大节约存储空间。C++编译系统正转载 2020-05-09 14:02:55 · 223 阅读 · 0 评论 -
C++异常使用思考
1.概述我觉得C++异常的讨论应该从三个方面去展开:异常的设计意义层面;什么样的异常应该用异常机制处理;异常的底层实现和效率层面;由于只是玩具级程序员,暂时更关注1、2,第3点后面再研究不过暂时实在还是太过于才疏学浅,以后再回来看看有多少地方是理解错的吧。2. 异常的设计意义C++有两种常用的异常处理思路:错误码机制,在函数返回值中包含式地返回错误码,结合与errno类似的...原创 2020-02-23 23:00:31 · 187 阅读 · 0 评论 -
C语言标准IO的缓冲机制
1.主要思想书上和很多地方只着重提到了延迟写,我有点疑惑,那么读缓冲是这样的情况呢?后面利用setbuf()自定义了一下缓冲,并输出。结合之前对于实现intel论文上的并行基数排序中一个优化,这个和延迟写相对的读缓冲优化,应该称为预读。这两个技术颇为通用,在标准IO缓冲中、在cahce机制中等等。预读,利用局部性原理,猜测既然读了一个字符,那么相邻一块字符被读几率都很大。为减少系统调用、减少...原创 2020-02-22 21:07:23 · 350 阅读 · 0 评论 -
scanf()和getchar()在循环中出现的输入问题研究
1. scanf()在循环中出现的问题下面这段代码,如果一开始就输入字符d这样非数字的话,那么会直接执行完剩余9次循环,用户不再有输入的机会。 int unused; for (size_t i = 0; i < 10; i++) { printf("please press any key to continue:\n"); scanf...原创 2020-02-22 17:15:37 · 653 阅读 · 0 评论 -
C语言基础文件读写总结
1. 基础输入函数int fscanf(FILE *stream, const char *format, …)参数stream,输入流fileIn之类;format,例如"%c %d %s“, ”%c,%d,%s"是不行的,不接受这样的分割;…,变量的指针/数组指针;返回值返回读取单元数,当无出错和非到达文件末尾时;返回EOF,当在中途到达文件末尾,或者发生读...原创 2020-02-19 22:45:19 · 327 阅读 · 0 评论 -
C++某些最佳实践收集
有些最佳实践确实没注意到,故摘录一下。p293 如果你不确定应该使用哪种容器,那么可以在程序中只使用vector和list的公共操作:使用迭代器,不使用下标操作,避免随机访问。这样,在必要时选择使用vector或list都很方便。...原创 2019-12-23 22:34:06 · 280 阅读 · 0 评论 -
关于类static成员的使用
1.类的static成员//非静态成员函数使用静态成员变量class staticTest{public: void func0() { cout << staticVar << endl; } static void func1() { }private: static int staticVar; int var;};//静态成...原创 2019-12-11 20:47:12 · 231 阅读 · 0 评论 -
关于编译器是否合成默认构造函数
1.我的疑惑语言标准,和编译器实现是不同的。语言标准感觉就像需求吧,编译器实现则是具体的实现。语言标准中甚至有很多未定义的地方,比如【未指定的值】到底是多少,到底用【未指定的值】还是【陷阱标识】作为默认初始化基本数据类型的初值。再比如ungetc函数,这个更乱。对于编译器合成默认构造函数问题,我一直有疑惑,c++ primer上说:如果我们的类没有显式地定义构造函数,那么编译器就会为我们隐...原创 2019-12-11 15:49:33 · 335 阅读 · 0 评论 -
C++初始化探究
1.C++数据类型参考C++标准,我认为数据类型可以分为这几大类型:基本数据类型类类型聚合体(非类类型的struct)数组2.C++初始化写法无符号T t、T t = new T默认初始化,全都适用;类的初始化列表class c{ c(): m(_m){}};()符号T t(val),T t(t1)显式初始化,基础数据类型和类类型可用,类类型常用;T...原创 2019-12-09 04:10:00 · 201 阅读 · 0 评论