摘要:operator=导致的“异常安全性”。 返回的*this,可能与rhs是同一个对象,但是当delete指针this时,会使pb对象被销毁, 而且会使rhs对象也销毁。 解决方案 一、可以采用“证同测试”达到“自我检查”的目的。 二、在没有复制pb所指的东西之前,别删除pb 三、swap数据
阅读全文
|
随笔分类 - c++(基础语法)
基础语法
摘要:operator=导致的“异常安全性”。 返回的*this,可能与rhs是同一个对象,但是当delete指针this时,会使pb对象被销毁, 而且会使rhs对象也销毁。 解决方案 一、可以采用“证同测试”达到“自我检查”的目的。 二、在没有复制pb所指的东西之前,别删除pb 三、swap数据
阅读全文
摘要:c++ 有符号int和无符号int做加算术运算的问题: 一、运算过程先把有符号的补码数直接看成无符号数,在和无符号数进行算术运算 二、int和unsigned int类型进行混合算数运算时,运算结果为非负数时,结果不会出现异常,当运算结果为负数时就会出现异常结果,往往异常结果值会很大。
阅读全文
摘要:一、strlen() strlen()为计算字符串长度的函数,以‘\0’为字符串结束标志。注意:其传入参数必须是字符串指针(char*), 当传入的是数组名时,实际上数组退化成指针了。 二、sizeof() sizeof()为运算符,用于计算所分配给元素的内存大小,其返回结果类型为size_t。
阅读全文
摘要:为什么要内存对齐? 1、平台原因(移植原因):不是所有的硬件平台都能访问任意地址上的任意数据,某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。 2、性能原因:数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于,对于访问未对齐的内存,处理器需要作两次内存访问;而对齐的内存访
阅读全文
摘要:迭代器虽然拥有指针的功能,但不是指针!其最重要的便是内容提纲和成员访问。 迭代器是一种类似指针的对象,其重载了指针->,*,++ --等操作符,其实质是封装了原生指针,为了为容器提供统一的接口, 一、声明 容器类型<typpe,.>::iterator 迭代器名称 例如:vector<int>::i
阅读全文
摘要:因最近看到大量的c类型指针强制转换,联系到c++的reinterpret_cast强制转换符,故总结一下。 先上图 由图中可以看出,先声明了一个结构体t与一个含有三个元素的数组num,接着声明一个指向结构体变量t的一个指针p。 接着使用reinterpret_cast强制转换符将数组首地址赋值给指针
阅读全文
摘要:C++ STL库map容器一些总结,欢迎大家指正补充。 map容器由两部分组成,分别为关键字(Key)和值(Value),关键字和值都可以声明为任意类型的数据,注意:关键字唯一,不能重复!使用需包含头函数#include<map> 一、声明 (1)std::map<Key,Value> Name ,
阅读全文
摘要:一、为什么使用模板?? 使用模板的目的是为了避免重复声明和定义一系列基本功能相同的函数或者类,其区别因传入参数的不同而产生不同类型的数据,其基本工作过程都是一致的! 二、调用模板函数产生不明确问题 (1)template declarations are only permitted at glob
阅读全文
摘要:C语言的强制转换为在数据面前之间加数据类型进行转换,即(目标数据类型)原数据类型。c++为了更好的区分强制转换的类型,达到见其名知其意的效果,共将强制转换分为四种,即 1、static_cast<目标数据类型>原数据类型 2、const_cast<目标数据类型>原数据类型 3、reinterpret
阅读全文
|