
C++
文章平均质量分 62
零度可乐不长胖
努力
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++—返回值优化
返回值优化(Return value optimization,缩写为RVO)是C++的一项编译优化技术,即删除保持函数返回值的临时对象。这可能会省略两次复制构造函数。当一个函数返回一个对象实例,一个临时对象将被创建并通过复制构造函数把目标对象复制给这个临时对象。C++标准允许省略这些复制构造函数,从某种程度上可以提高程序的运行效率,对需要分配大量内存的类对象其值复制过程十分友好。如果我们打印一下地址就会发现。构造和析构的是同一个对象实例。原创 2022-10-19 20:14:38 · 927 阅读 · 1 评论 -
[ C++ ] — 智能指针
一、三种智能指针 auto_ptr unique_ptr shared_ptr (auto_ptr是C++98提供的方案,C++11已经将其摒弃,以下只是示例,实际不要使用auto_ptr) 使用new和delete管理动态内存常出现的问题: (1)忘记delete内存 (2)使用已经释放的对象 (3)同一块内存释放两次 这三种智能指针模板都定义了类似指针的对象,可以将new获得的地址赋给这种对象。当智能指针过期时,其析构函数将使用delete释放内存(内存被自动释放,无需手动delete)。 智能指原创 2022-02-08 23:32:56 · 265 阅读 · 0 评论 -
[ C++ ] — 内联函数
1、什么是内联函数 其定义位于类声明中的函数都将自动成为内联函数 也可以使用inline限定符,在类声明之外定义成员函数,使之成为内联函数 2、内联函数的作用 引入内联函数的目的是为了解决程序中函数调用的效率问题 程序在编译器编译的时候,编译器将程序中出现的内联函数的调用表达式用内联函数的函数体进行替换,而对于其他的函数,都是在运行时候才被替代。(注意 编译 和 运行 的区别) 3、优点及注意事项 优点:当函数体比较小的时候, 内联该函数可以令目标代码更加高效. 对于存取函数以及其它函数体比较短, 性能原创 2021-12-15 16:34:26 · 1208 阅读 · 0 评论 -
[ C++ ] — 转换构造函数
当一个构造函数只有一个参数,而且该参数又不是本类的const引用时,这种构造函数称为转换构造函数,例如, class Box { public: Box(int val) { //转换构造函数 cout << "转换构造函数"; } }; 一个构造函数接收一个不同于其类类型的形参,可以视为将其形参转换成类的一个对象,例如, int main() { Box a = 23; //隐式调用,由于强制类型转换,23先被Box的转换构造函数构造成Test对象原创 2021-12-14 21:40:44 · 421 阅读 · 0 评论 -
[ C++ ] — 拷贝构造函数(复制构造函数)
拷贝构造函数 拷贝构造函数就是用 同一类型的对象复制成员值来初始化对象(当出现类的 “=” 赋值时,就会调用拷贝构造函数) 简单来说,拷贝构造函数就是来复制对象的 如果类中没有定义拷贝构造函数,编译器会自行定义一个。 如果类成员都是简单类型(如标量值),则编译器生成的复制构造函数已足够,无需定义自己的类型。 如果类需要更复杂的初始化,则需要实现自定义复制构造函数。例如,如果类成员是指针,则需要定义复制构造函数以分配新内存,并复制另一个对象中的值。 classname(const classname&am原创 2021-12-14 18:59:52 · 6419 阅读 · 1 评论 -
[ C++ ] — 函数指针
一、函数名就是函数的地址 void func(void) { } int main() { cout << func << endl; return 0; } 输出:00D2142E 二、函数指针 1、声明 一般来说,声明指针时必须指定确定指向的类型,函数指针也是如此。当声明函数指针时,需要指定指向的函数类型,包括: 返回类型 参数列表 double (*fp)(int); //返回类型为double,参数为int类型 也可以用typ原创 2021-12-14 12:34:52 · 548 阅读 · 0 评论 -
[ C++ ] — typedef
typedef可以给各种类型(基本类型、数组、函数、函数指针、类、模板…)起别名 Tips : 需要注意数组和函数指针的定义方法 1、基本数据类型 重命名数据类型 typedef int INT, * P_INT typedef int INT, * P_INT cout << typeid(INT).name() << endl; cout << typeid(P_INT).name() << endl; 输出: int int * 此时,int被重命原创 2021-12-14 09:57:04 · 427 阅读 · 0 评论 -
[ C++ ] — 结构体和共用体
一、C++中的结构体 1、声明 声明的过程不分配内存 struct Box{ char name[10]; double length; double width; double height; }; 声明的同时实例化,实例化要分配内存 struct Box{ char name[10]; double length; double width; double height; } book; 2、初始化 初始化方式: 初始化列表 构造函数 (1) 初始化列表 struct Box{原创 2021-12-13 23:05:04 · 368 阅读 · 0 评论 -
《C++ Primer Plus》学习随记3---引用变量
int rats; int &amp; rodents=rats; rodents就是一个引用变量,他是rats的别名,指向相同的值和内存单元。 int &amp; 是类型名。 引用变量必须在声明时将其初始化 引用变量一旦与某个变量关联起来,就将一直效忠于它,也就是没法再给引用变量赋其它值。 可以把“rodents”理解为指针的形式 int *const rodents=&amp;...原创 2019-02-03 11:14:31 · 186 阅读 · 0 评论 -
《C++ Primer Plus》学习随记1---模拟EOF
EOF(文件结束符)—“End Of File”。通常,EOF被定义为值-1。 几种检测模拟EOF结束输入的代码实现: 1、eof(),fail() 从输入流读取数据, eof( )——如果检测到EOF,cin.eof()返回true,否则返回false fail( )——用来判断一个流是否“坏”掉了。如果failbit、badbit中任意一种或两种被设置,则fail()返回true,否则返回fa...原创 2018-10-15 21:35:34 · 301 阅读 · 0 评论