1.C++变量

版权声明: https://blog.csdn.net/dadan1314/article/details/82353900

变量

* 类型

基本类型(9种)

◆ 整型

布尔型

布尔型(bool) -                 true/false

字符型  - 转义字符

字符型(char)                    'a'

宽字符型(wchar_t )         L'a' 

整型    - 四种表达方式(二进制,八进制,十进制,十六进制)

短整型(short

整型(int)                        1(默认为int)

长整型(long)                 1L或者1l                  

◆ 浮点型 - 两种表达方式(十进制和科学计数法)

单精度浮点型(float)                    1.1F或1.1f

双精度浮点型(double)                1.1(默认为double)

长双精度浮点型(long double

复合类型(7种)

    数组

    指针*

引用&

非常量左值引用、常量左值引用、非常量右值引用、常量右值引用

以int为例:int&,const int&,int&&,const int&&

共用体(union)

枚举(enum)

结构体(struct)

结构体大小

遵循两个原则+处理器架构+编译器

两个原则

1.结构体每个成员的偏移量是该成员最大对齐方式的整数倍,即offset(member)/align(member)=整数;

2.结构体总大小是该结构体最大对齐方式的整数倍,即sizeof(struct)/align(struct)=整数;

编译器

/* 编译器指定最大对齐方式为1 */
#pragma pack(push)
#pragma pack(1)
// 定义结构体
#pragma pack(pop)

自身对齐值:基本数据类型的变量就是其本身所占字节大小,复合类型的最大对齐值;

指定对齐值:由#pragma pack(value)指定的对齐值value;

有效对齐值:自身对齐值和指定对齐值中较小的值。

类(class)

▶ STL模板类

☞ 序列容器

vector - stack

list 

deque - priority-deque/queue

☞ 关联容器

set/multiset

map/multimap

unordered_map/unordered_multiset/unordered_set/unordered_multiset   ---> 无序容器(c++11)

PS:对于自定义key,需提供hash函数和比较函数

☞ 函数类

▶ 标准类

std::string

▶ 自定义类和自定义容器

自定义容器

  1. 容器方法begin,end,size
  2. begin和end返回迭代器
  3. 迭代器操作符operator!=  operator++  operator*
  4. 迭代器能定位

STL中最精简容器:std::initializer_list<T>

在构造函数中使用该容器,可以用初始化列表

特殊类型

void

* 标识

数字、字母和下划线组成,不能以数字开头,大小写敏感

* 限定

static

extern          默认

mutable

const         - 默认为static const,如需外部引用需显式指定extern const

volatile      - 易变性,不可优化性,顺序性(保证编译器语句顺序,不能保证cpu顺序执行)

unsigned(U/u)

类型推导(c++11)

auto

类型指示符,提示编译器对此类型的变量做类型的自动推导。

推导规则:

  • 当不声明为指针或者引用时,auto的推导结果和初始化表达式抛弃引用和cv限定符后的类型一致;
  • 当声明为指针或者引用时,auto的推导结果将保持cv属性;
// 不声明指针或者引用
int   i0 =  1;
int&  i1 = i0;
auto  i2 = i1;            // auto -> int      (初始化表达式类型为int&,抛弃了引用后是int)

//   声明指针或者引用
      int   i3 =  1;
const int&  i4 = i3;
     auto&  i5 = i4;      // i5 -> const int& (初始化表达式类型为const int&,保留const属性)

 推导限制

  • 函数参数类型
  • 模板
  • 结构体非静态成员

 decltype

推导出表达式的类型,编译期完成

推导规则:

  • 标识符和类访问表达式,decltype(exp)和exp表达式类型一致;
  • 函数调用,若是非类类型纯右值忽略cv,否则跟返回值保持一致;
  • 其他运算表达式,若是左值decltype(exp)和exp类型的左值引用一致,否则和exp类型一致;

初始化列表

普通数组

POD(平凡和标准布局)

判断:std::is_pod<T>::value

好处:

  • 字节赋值,可以使用memset和memcpy等内存操作
  • 与c内存布局兼容,C和C++直接操作安全

平凡  std::is_trivial<T>::value

平凡的默认构造函数和默认析构函数

平凡的默认拷贝构造函数和默认移动构造函数

平凡的默认拷贝赋值函数和默认移动赋值函数

无虚函数和虚基类

标准布局 std::is_standard_layout<T>::value

有待完善。。。

容器和std::initializer_list构造的类

猜你喜欢

转载自blog.csdn.net/dadan1314/article/details/82353900
今日推荐