参考 https://zh.cppreference.com/w/cpp/named_req/PODType 定义 要求满足如下条件: 标量类型 满足下列要求的类类型: 为平凡类型, 即要求满足如下条件: 可平凡复制 (TriviallyCopyable),即满足如下条件: 标量类型 可平凡复制类类 ...
分类:
编程语言 时间:
2021-06-06 19:11:32
阅读次数:
0
在 C++ 11 中,"= default" 和 "= delete" 函数使我们能够显示指定成员函数是否自动生成。 其中,"= delete" 使我们能够避免所有函数 (特殊成员函数,普通成员函数和非成员函数) 参数中出现错误的类型提升 (导致非预期的函数调用)。 C++ 特殊成员函数: 即使用户 ...
分类:
其他好文 时间:
2021-02-10 12:59:39
阅读次数:
0
move语义 0、课前秀 + 这个概念不是很懂,但看cppreference里分为了两种:移动构造,移动赋值 + "move constructors" + "move assignment" + 移动语义是通过右值来匹配临时的, 普通的左值能否借助移动语义来优化性能 。 + 这是 "std::mo ...
分类:
编程语言 时间:
2020-05-05 18:01:09
阅读次数:
66
本文主要是《C++ Primer Ed5》第13章内容,希望能够对C++的拷贝控制了解的更为深入一些。 概述 C++中的拷贝控制操作主要涉及的几个拷贝控制函数为: 拷贝构造函数 拷贝赋值运算符 移动构造函数 移动赋值运算符 析构函数 其中, 1和3定义了当用同类型的另一个对象【初始化】本对象时做什么 ...
分类:
编程语言 时间:
2020-04-25 19:36:37
阅读次数:
85
记录一下这几个容易混淆的概念。 可移动构造(MoveConstructible) 指定该类型的实例可以从一个右值实参构造 定义 给定: T类型的右值表达式rv 任意标识符 u 下列表达式必须合法且拥有指定的效果: T u = rv; //u 的值等于 rv 在初始化前的值。rv 的新值未指明。T(r ...
分类:
移动开发 时间:
2020-04-19 12:49:11
阅读次数:
90
新标准的一个最主要的特性就是可以移动而非拷贝对象的能力,在某些情况下,对象拷贝后会立即销毁,在这些情况下,使用移动而非拷贝对象能够大大提升性能。 另外像 类 这样的类,都包含不能被共享的资源,这些类型的对象不能拷贝但是可以移动。 右值引用 为了支持移动操作,新标准引入了一种新的引用类型 右值引用。所 ...
分类:
移动开发 时间:
2020-03-15 13:17:44
阅读次数:
75
赋值运算符 除了拷贝赋值和移动赋值,类还可以定义其他赋值运算符以使用别的类型作为右侧运算对象。 赋值运算符必须定义为成员函数。 复合赋值运算符 复合赋值运算符不必一定是类的成员函数,但是最好把包含复合赋值在内的所有赋值运算都定义在类的内部,为了与内置类型的复合赋值保持一致,类中的复合赋值运算符也要返 ...
分类:
其他好文 时间:
2020-03-15 11:19:24
阅读次数:
45
在使用基本指针类型时,因为要手动释放指针指向的内存,常常容易造成内存泄漏,特别是异常分支很多的情况下。而智能指针类型就是将基本指针类型封装成模板类,以便更好地管理内存。 智能指针都包含一个explicit构造函数,因此基本指针类型不能隐式转换成智能指针,需要显式调用。 shared_ptr<doub ...
分类:
编程语言 时间:
2020-03-05 22:22:30
阅读次数:
116
当定义一个类时,我们显式地或隐式地指定了此类型的对象在拷贝、赋值和销毁时做什么。一个类通过定义三种特殊的成员函数来控制这些操作,分别是 拷贝构造函数 、 拷贝赋值运算符 和 析构函数 。 拷贝构造函数定义了当用同类型的另一个对象初始化新对象时做什么,拷贝赋值运算符定义了将一个对象赋予同类型的另一个对 ...
分类:
编程语言 时间:
2020-02-24 13:23:18
阅读次数:
86
// 单链表的建立// 单链表的建立可以用头插法或者尾插法。头插法是指建立单链表时, 总是将新节点插入到当前链表的表头。// 头插法常用在将一个已存在的链表逆序。 1 #include <iostream> 2 3 using std::cout; 4 using std::endl; 5 6 st ...
分类:
其他好文 时间:
2020-01-08 22:47:30
阅读次数:
200