MyTinySTL源码阅读笔记:vector部分笔记1

本文详细介绍了MyTinySTL中vector类的实现细节,包括预处理指令、静态断言static_assert的使用、typename的作用,以及构造函数的注意事项,特别是noexcept和构造函数的内容,探讨了内存分配与对象构造的分离策略。
摘要由CSDN通过智能技术生成

1. 预处理指令

#ifdef max
#pragma message("#undefing marco max")
#undef max
#endif // max
  • 这段预编译代码的功能是:(#ifdef max) 如果标识符 max 已经用宏定义进行过定义,那么执行下面内容:

  • 在编译输出窗口打印文本 “#undefing marco max” (#pragma message("#undefing marco max"))

  • 删除事先定义的宏定义 max (#undef max)

2. 模板类 vector

2.1 静态断言 static_assert

static_assert(!std::is_same<bool, T>::value, "vector<bool> is abandoned in mystl");
  • std::is_same<bool, T>::value, 如果传入模板参数是bool,那么 std::is_same<bool, T>::value 值为true。
  • std::is_same<bool, T>::value 会对int、const int、int& 和const int&都会严格区别开来。但是有些时候,我们希望程序将这些都识别为同一类型。因此,这个时候就需要 std::decay<T>::type 对类型进行退化处理,也就是这样1
std::is_same<typename std::decay<T>::type,int>::value 
  • 静态断言是编译期间的断言,因此叫做静态断言。其语法很简单:static_assert(常量表达式,提示字符串)。如果第一个参数常量表达式的值为false,会产生一条编译错误,错误位置就是该static_assert语句所在行,第二个参数就是错误提示字符串.

  • 该静态断言的代码含义:如果传入模板类型是bool的话,就会产生断言错误,并在编译窗口打印 “vector is abandoned in mystl”。

2.2 typname

"typename"用于指出模板声明(或定义)中的非独立名称(dependent names)是类型名,而非变量名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值