C++ 知识点(摘抄书籍内容)
知识点 | 说明 |
---|---|
所谓的引用就是给变量取一个别名,使一块内存空间可以通过几个变量名来访问。声明引用类型的变量需要在变量名前加上符号&,并且必须指定初值,即被引用的变量。 C++引入引用的主要目的是将引用作为函数的参数。 左值和右值都是针对表达式而言的,左值是指表达式结束后依然存在的持久对象,在内存有一块固定的存储空间,因而可以放在赋值号的左边。右值是指表达式结束后就不再存在的临时对象,该对象被使用后就消亡了。 |
https://weread.qq.com/web/reader/3e7329b071e2a55d3e76162 |
shared_ptr:共享式指针管理类。内部有一个引用计数,每当有新的shared_ptr对象指向同一个被管理的内存资源时,其引用计数会递增。该内存资源直到引用计数变成0时才会被释放。 unique_ptr:独占式指针管理类。被保护的内存资源只能赋给一个unique_ptr对象。当unique_ptr对象销毁、重置时,该内存资源被释放。一个unique_ptr源对象赋值给一个unique_ptr目标对象时,内存资源的管理从源对象转移到目标对象。 |
https://weread.qq.com/web/reader/3ee32e60717f5af83ee7b37 |
为什么程序清单11.14中的形式参数是const char * string,而不是const char string[]?从技术方面看,两者等价且都有效。使用带方括号的写法是为了提醒用户:该函数处理的是数组。然而,如果要处理字符串,实际参数可以是数组名、用双引号括起来的字符串,或声明为char *类型的变量。用const char * string可以提醒用户:实际参数不一定是数组。 | https://weread.qq.com/web/reader/a99327c071d07b0da996784 |
成员函数末尾的const起什么作用呢?告诉系统,这个成员函数不会修改该对象里面的任何成员变量的值等,也就是说,这个成员函数不会修改类对象的任何状态。 | https://weread.qq.com/web/appreader/55f32d30813ab6ea1g017832 |
但函数名不是变为“_mean”,而是增加了很多奇怪的字符,这是因为Visual C++要对函数名进行修饰,以包含函数名、函数的参数类型、函数的返回类型等诸多信息。可以通过在声明语句中加上“extern "C"”去掉Visual C++对函数名的修饰,也就是采用C语言修饰格式,此时函数名就是“_mean”。 | https://weread.qq.com/web/appreader/a18322e05bccfaa183bbd0c |
C++11引入了一个新的关键字nullptr充当单独的空指针常量的角色。nullptr和任何指针类型之间可以发生隐式类型转换,同样也可以隐式转换为bool型(取值为false)。但是不存在到整型的隐式类型转换。因此调用f(nullptr)将会调用函数f(int *)。 | https://weread.qq.com/web/reader/3e7329b071e2a55d3e76162k32932b102423295c76ac7d9 |
基类的析构函数应该定义为虚函数,这样在实现多态的时候不会造成内存泄漏。如果基类析构函数未声明为virtual,当使用基类指针指向派生类时,delete指针只会调用基类的析构函数,而不会调用派生类的析构函数。如果声明为virtual,则会先调用派生类的析构函数,再调用基类的析构函数,这样就能够避免内存泄漏。 | https://weread.qq.com/web/reader/ddf32da071916d90ddf9f55k1f032c402131f0e3dad99f3 |
强制类型转换的性质有4种:静态转换(static_cast)、重解释转换(reinterpret_cast)、常量转换(const_cast)和动态转换(dynamic_cast)。 静态转换static_cast,可用于允许编译器隐式执行的任何类型转换。用static_cast可以告诉读程序的程序员此处有一个类型转换。 |
https://weread.qq.com/web/reader/3e7329b071e2a55d3e76162k70e32fb021170efdf2eca12 |
在类定义时,如果定义了构造函数,则编译器不再生成默认构造函数。如果类中也没有定义默认构造函数,则定义类对象时必须指定初值。如果希望仍保留编译器默认的构造行为,可以使用=default要求编译器生成一个默认的构造函数和复制构造函数。 | https://weread.qq.com/web/reader/3e7329b071e2a55d3e76162 |
请注意,'\0'在string之中并不具有特殊意义,但在一般C-string中却用来标识结束。在string中,字符'\0'和其他字符的地位完全相同。 | https://weread.qq.com/web/reader/48432b8072021a20484535b |
虽然系统库<cstring> 为其提供了size_t类型来支持多平台间的代码共享支持,但是使用auto关键字我们同样可以达到代码跨平台的效果。由于size_t的适用范围往往局限于 <cstring> 中定义的函数,auto的适用范围明显更为广泛。 |
https://weread.qq.com/web/reader/596325a059346c59642f910kd3d322001ad3d9446802347 |