JoeChenzzz

导航

2018年9月26日 #

移动赋值运算符(c++11)

摘要: 1.概念 1)移动赋值运算符是一个重载的赋值运算符,参数为自身类的右值引用,返回值自身类的左值引用,由于不抛出任何异常,用noexcept指定(如果定义在类的外面,那么定义也要用noexcept指定) 2.合成移动赋值运算符 同移动构造函数 3.具有拷贝赋值和移动赋值两种功能的赋值运算符 此赋值运算 阅读全文

posted @ 2018-09-26 16:04 JoeChenzzz 阅读(3549) 评论(0) 推荐(0) 编辑

移动构造函数(c++11)

摘要: 1.概念 1)C++中对象发生拷贝的场景可以分为两种,一种是被拷贝的对象还要继续使用,另一种是被拷贝的对象不再使用;第二种一般可以认为是对右值的拷贝 2)C++11中引入了移动构造函数,对象发生拷贝时不需要重新分配空间而是使用被拷贝对象的内存,从而提高代码运行效率 3)移动构造函数的第一个参数必须是 阅读全文

posted @ 2018-09-26 15:31 JoeChenzzz 阅读(2055) 评论(0) 推荐(1) 编辑

noexcept(c++11)

摘要: 1.概念 1)c++中的异常处理是在运行时而不是编译时检测的,为了实现运行时检测,编译器可能会创建额外的异常处理代码,然而这会妨碍程序优化 2)noexcept说明符:若修饰函数(紧跟在参数列表后面),则意为承诺编译器这个函数不抛出任何异常 3)C++11之前使用throw()来指明某个函数不会抛出 阅读全文

posted @ 2018-09-26 14:38 JoeChenzzz 阅读(505) 评论(0) 推荐(0) 编辑

右值引用和std::move函数(c++11)

摘要: 1.对象移动 1)C++11新标准中的一个最主要的特性就是移动而非拷贝对象的能力 2)优势: 在某些情况下,从旧内存拷贝到新内存是不必要的,此时对对象进行移动而非拷贝可以提升性能 有些类如IO类或unique_ptr类包含不能被共享的资源,它们不能被拷贝但是可以移动 3)移动操作“窃取”资源,并不分 阅读全文

posted @ 2018-09-26 14:19 JoeChenzzz 阅读(327) 评论(0) 推荐(0) 编辑

i++和++i

摘要: 区别1: i++ 返回原来的值,++i 返回加1后的值 这个很明显,不给予解释。 区别2: i++ 不能作为左值,而++i 可以 左值: 左值放在赋值符号(=)的左边,左值表示存储在计算机内存的对象,而不是常量或计算的结果。左值在内存中可以进行读和写操作,左值可以被赋值 右值: 右值放在赋值符号(= 阅读全文

posted @ 2018-09-26 11:22 JoeChenzzz 阅读(262) 评论(0) 推荐(0) 编辑

=delete(c++11)

摘要: 1.为什么要阻止类对象的拷贝? 1)有些类,不需要拷贝和赋值运算符,如:IO类,以避免多个拷贝对象写入或读取相同的IO缓冲 2.如何阻止? 1)不定义拷贝构造函数和拷贝赋值运算符时,好心的编译器也会及时地学习雷锋好榜样帮你合成定义,即传说中的合成拷贝构造、合成拷贝赋值,所以这样阻止不了 2)c++1 阅读全文

posted @ 2018-09-26 10:49 JoeChenzzz 阅读(3972) 评论(0) 推荐(1) 编辑