随笔分类 -  C++

摘要:如题,为什么free和delete(当然底层还是调用free)能够释放数组空间。 写个测试代码: #include <iostream> #define N 16 using namespace std; int main() { int* p = (int*) (malloc(sizeof(int 阅读全文
posted @ 2020-03-11 01:31 NeoZy 阅读(506) 评论(0) 推荐(0)
摘要:引用折叠:创建引用的引用时(如模板参数、类型别名)会造成引用折叠,折叠规则如下:1.&+&->&&&+&->&&+&&->& 2.&&+&&->&& 3.左值(非引用)+&&(模板形参的)->&,实际上是:编译器会自己在模板形参类型前加&,这样就变成了:&+&&,依据前面的规则还是会折叠为&。 注意 阅读全文
posted @ 2020-03-07 23:55 NeoZy 阅读(2607) 评论(1) 推荐(0)
摘要:1.模板的参数列表里除了普通的typename T这样的类型参数之外,还可以定义非类型参数,其表示一个值而不是一个类型。并且这个非类型参数是一个常量值,可以用来指定数组大小。 例子: template <int a,int b> bool CmpStr(const char(&x) [a],cons 阅读全文
posted @ 2020-03-07 23:05 NeoZy 阅读(208) 评论(0) 推荐(0)
摘要:运行以下代码: void print(int x,int y,int z){ cout<<"&x= "<<&x<<endl; cout<<"&y= "<<&y<<endl; cout<<"&z= "<<&z<<endl; } int main() { print(1,1,1); getchar(); 阅读全文
posted @ 2020-03-07 15:17 NeoZy 阅读(1260) 评论(0) 推荐(0)
摘要:要面试了,复习一下c++的语言细节,才发现自己差的还很多。 static int i1=1; static int i2=1; int i3; static int i4; int main() { static int i5=1; int i6=1; int i7; cout<<&i1<<" "< 阅读全文
posted @ 2020-03-06 13:54 NeoZy 阅读(1019) 评论(0) 推荐(0)
摘要:shared_ptr允许多个指针指向同一个对象,unique_ptr则“独占”所指向的对象。标准库还定义了一种名为weak_ptr的伴随类,它是一种弱引用,指向shared_ptr所管理的对象,这三种智能指针都定义在memory头文件中。 不可以用shared_ptr或者weak_ptr指向一个un 阅读全文
posted @ 2020-03-06 01:10 NeoZy 阅读(160) 评论(0) 推荐(0)
摘要:右值引用 :int &&p 左值引用:即普通引用 int& p 常量左值引用:const int& p 共同点:都是变量,都是引用 区别:左值引用只能绑左值,右值引用只能绑右值,但注意右值引用同样也是变量,是左值! 常量左值引用却是个奇葩,它可以算是一个“万能”的引用类型,它可以绑定非常量左值、常量 阅读全文
posted @ 2020-03-06 00:55 NeoZy 阅读(265) 评论(0) 推荐(0)
摘要:模板是范型编程的基础,所谓范型编程就是用独立与任何特定类型的方式编写代码所以简单地说,类是对象的抽象,而模板又是类的抽象,也就用模板能定义出具体类再理解深刻点在c++里,常说的多态一般分为两种:一种是运行时的多态,也就是虚函数体现的多态另一种是编译时的多态,也就是范型编程的多态,体现在参数的多态在作 阅读全文
posted @ 2020-03-04 02:15 NeoZy 阅读(1294) 评论(0) 推荐(0)
摘要:const只是声明变量类型/函数返回类型为常量,不能改动。 constexpr修饰变量/函数是显式告知编译器“我是常量,不要在多费功夫了,直接把我替换为常量加入汇编代码!”。 比如下面这样的函数或者变量都是这种情况: 1 constexpr int x=1; 2 int constexpr f(){ 阅读全文
posted @ 2020-03-03 17:47 NeoZy 阅读(649) 评论(0) 推荐(0)
摘要:C++中我们可以平时使用vector等容器时一般这样初始化:vector<int> p={1,2,3}; 其中{1,2,3}是一种叫initializer_list的类型,是C++11新出的 除了可以用来初始化容器, 还可以像python一样用: for x in [1,2,3]: print(x) 阅读全文
posted @ 2020-03-03 14:01 NeoZy 阅读(3679) 评论(0) 推荐(0)
摘要:派生类希望基类重载函数可见,情况有三种: a)派生类中覆盖某个版本,则某个版本可见,全部都覆盖重写,则全部版本可见。 b)派生类中一个也不覆盖,则全部基类版本可见。 c)派生类需要添加新的重载版本,同时又需要可见基类的重载版本,此时并不是必须全部覆盖重写全部版本。可在派生类中用using声明基类重载 阅读全文
posted @ 2020-02-29 01:45 NeoZy 阅读(653) 评论(0) 推荐(0)
摘要:转载于:https://www.runoob.com/w3cnote/cpp-virtual-functions.html 一、定义 纯虚函数是在基类中声明的虚函数,它在基类中没有定义,但要求任何派生类都要定义自己的实现方法。在基类中实现纯虚函数的方法是在函数原型后加 =0: virtual voi 阅读全文
posted @ 2020-02-29 00:39 NeoZy 阅读(554) 评论(0) 推荐(0)
摘要:1.尽管派生类中含有基类继承来的成员,但派生类初始化这部分变量需要调用基类的构造函数。 1 class A 2 { 3 private: 4 int x; 5 virtual void f(){cout<<"A f"<<endl;} 6 public: 7 A(/* args */){x=1;cou 阅读全文
posted @ 2020-02-27 22:45 NeoZy 阅读(1869) 评论(0) 推荐(0)
摘要:转载:https://blog.csdn.net/vanturman/article/details/79393317 首先记住一点:派生类能且只能访问基类的public和protected成员!默认继承方式是private! 第一: private,public,protected的访问范围: p 阅读全文
posted @ 2020-02-27 19:45 NeoZy 阅读(565) 评论(0) 推荐(0)
摘要:转载于:https://blog.csdn.net/lmb1612977696/article/details/81543802 std::ref和std::cref 解释: std::ref 用于包装按引用传递的值。 std::cref 用于包装按const引用传递的值。 为什么需要std::re 阅读全文
posted @ 2020-02-27 15:51 NeoZy 阅读(330) 评论(0) 推荐(0)
摘要:1. char* x;这样的一定是野指针,指针声明时要直接初始化!或者置null也行! 2. 1 int main() 2 { 3 char *x=new char; 4 delete x; 5 cout<<*x; 6 getchar(); 7 return 0; 8 } delete x;之后,x 阅读全文
posted @ 2020-02-26 01:55 NeoZy 阅读(376) 评论(0) 推荐(0)
摘要:代码: 1 class test{ 2 public: 3 static void f1(){cout<<y<<endl;} 4 void f2(){cout<<y<<endl;} 5 void f3(){cout<<x<<endl;} 6 void f4(int p){cout<<p<<endl; 阅读全文
posted @ 2020-02-26 01:31 NeoZy 阅读(1918) 评论(0) 推荐(0)
摘要:1.算术移位和逻辑移位。 逻辑移位是只补0,算术移位是看符号,负数补1,正数补0(讨论的是右移的情况下)。 负数左移右边一样补0。如果遇到位运算的相关题目需要对int变量进行左移而且不知道正负,那么先强制类型准换为unsigned再进行移位操作。 2.constexpr意义是字面值常量,即在编译期就 阅读全文
posted @ 2020-02-25 17:40 NeoZy 阅读(163) 评论(0) 推荐(0)
摘要:构造函数和重载函数运算符如何区分: 1 class Distance 2 { 3 private: 4 int feet; 5 int inches; 6 public: 7 Distance(){ 8 feet = 0; 9 inches = 0; 10 } 11 Distance(int f, 阅读全文
posted @ 2020-02-25 16:35 NeoZy 阅读(474) 评论(0) 推荐(0)
摘要:怕忘了,写这:析构函数不会释放指针成员指向的对象(但智能指针类时有自己的析构函数的)。 析构函数中成员按初始化顺序的逆序销毁。内置类型没有析构函数。 继承体系中,派生类析构函数最先执行,然后是其基类的析构函数,以此类推,沿着继承体系的反方向往上。 众所周知,C++的类如果没有默认构造函数,会自动生成 阅读全文
posted @ 2020-02-23 23:40 NeoZy 阅读(458) 评论(0) 推荐(0)