随笔 - 92  文章 - 0 评论 - 0 trackbacks - 0

摘要:一、Overloading Rules for Rvalue and Lvalue References 左值引用和右值引用的优先级问题 1、如果只实现了左值引用,那么不能传入右值和const。 void f(X& x); 2、如果只实现了void f(const X& x); 可以接收左值和右值。 阅读全文
posted @ 2019-11-28 15:46 newbird2017 阅读 (3) 评论 (0) 编辑
摘要:#include <stdio.h> class A{ public: A(){f();} virtual void f(){printf("in class A\n");} }; class B:public A{ public: void f(){printf("in class B\n");} 阅读全文
posted @ 2019-11-15 19:16 newbird2017 阅读 (2) 评论 (0) 编辑
摘要:POD: 结构体内的成员,必须按声明的先后顺序存储。粗略的是这样。 但是 栈又是从高到低增长的。 所以,一个变量在获得一个栈的一片内存后,不同的object之间,定义先后的object,内存地址是相反的。 但是在一个object内部,是从低到高的。 继承是以追加的方式。 阅读全文
posted @ 2019-11-15 15:40 newbird2017 阅读 (2) 评论 (0) 编辑
摘要:#include <iostream> #include <stdio.h> using std::cout; using std::endl; class A{ public: A(int a):r(a){printf("A::r %p\n", &r);} int & r; }; int main 阅读全文
posted @ 2019-11-15 11:29 newbird2017 阅读 (7) 评论 (0) 编辑
摘要:#include <iostream> using std::cout; class A{ public: virtual void f(){cout << "A f\n";} }; class B:public A{ public: void f(){cout << "B f\n";} }; vo 阅读全文
posted @ 2019-11-15 11:20 newbird2017 阅读 (2) 评论 (0) 编辑
摘要:两个原则: 1、一个自动变量,多数在栈上,起始地址默认要求是其自身大小的整数倍。 即 char c; c的地址可以任意。 int a; a的地址必须是sizeof(int)的整数倍。 2、一个结构体的大小,必须是其内部成员size的最大公倍数。 以代码为例,看看发生了什么。 struct align 阅读全文
posted @ 2019-11-14 17:19 newbird2017 阅读 (6) 评论 (0) 编辑
摘要:找出一个数组中,出现超过半数的元素。 怎么做呢?分而治之,两人分组,如果两个相同,就保留,否则都不要。最后如果多出来一个,也保留。 具体情况就是: 抽屉原理: 假设现在有2k个数,然后elem至少有k+1个。 把k+1个数,放到k个抽屉里,一定会有重复的。 比如: 1, 2, 1, 2, 1, 2, 阅读全文
posted @ 2019-05-17 16:47 newbird2017 阅读 (7) 评论 (0) 编辑
摘要:vector::push_back操作,保证了如果过程中出现异常,vector不会发生变化。 push_back过程中,可能会因为已有内存空间不够,申请新的内存,同时把原内存中已有的元素,放到新申请的内存中。 这时候,如果移动构造不保证没有异常,就会发生一件事: 为了保证前述性质,不得不调用copy 阅读全文
posted @ 2019-04-23 16:04 newbird2017 阅读 (11) 评论 (0) 编辑
摘要:一般来说,swap操作将容器内容交换不会导致容器的指针、引用、迭代器失效。 但当容器类型为array和string时除外。 原因在于:SSO (Short String Optimization 指C++针对短字符串的优化。) 默认情况下,C++的std::string都是存储在heap中,导致访问 阅读全文
posted @ 2019-04-17 11:50 newbird2017 阅读 (14) 评论 (0) 编辑
摘要:static 变量在类声明中只是声明,要在外面单独定义。 不能在对象中直接访问?可以访问。但是要在外面定义。 初始化列表不能对静态成员做初始化。 静态成员变量遵守普通成员变量的规则。 a.i A::i 都可以。 静态函数中this不可用。 阅读全文
posted @ 2019-04-01 19:19 newbird2017 阅读 (18) 评论 (0) 编辑