C++ 关键字(static const extern inline...)的理解

 

 

一.基本数据类型()

auto:

声明变量时根据初始化表达式自动推断该变量的类型

auto a = 1;  //a为int类型的变量

auto关键字更适用于类型冗长复杂、变量使用范围专一时,使程序更清晰易读 例:

std::vector<int> vect;
for (auto it = vect.begin(); it != vect.end(); ++it)
{

   //it的类型是std::vector<int>::iterator
  std::cin >> *it;
}

详细参考:https://blog.csdn.net/xiaoquantouer/article/details/51647865·

decltype:

声明变量时根据初始化表达式自动推断该变量的类型。

与auto关键字类似。auto定义变量时,必须初始化,编译器才能根据初始值判断变量类型。decltype可以根据返回值自动确定变量类型。用法:

decltype(Func) value; //变量value的类型由函数Func的返回值确定。此处Func的返回值类型不能为void。

bool:

占用内存:1byte   (验证:vs2017 )为true时  在内存中的表示 0000 0001 ;为false时 0000 0000

有两个值:true或false。同时0表示false,其它数字都表示true

Q: 为什么不用一个bit来保存bool类型的变量?

A: 电脑对内存最小的寻址单位为byte,所以如果要做成1bit的话读出时需要再进行一次与运算和移位操作,写入需要增加移位操作和或运算,效率会下降一些。

char:

占用内存:1byte 

可以表示256(2^8)个字符: 包括128个Ascii字符和128个Ascii扩展字符。(unsigned char 表示128个Ascii)

整形变量 int, short, long:

64位机器  占用内存: int 4byte,  short  2byte, long 4byte

int和long都是占用4个字节,要long有什么意义?

    C语言开始时只有char(8位)和int(16位)两种,后来随着发展又加入了short(16位)和long(32位),此时,int可以是16位或者32位,依赖于平台和后续的兼容性。再后来当64位出现时,long long(64位)又被添加进来,为了进行规范,对较小的一些类型的范围就有了一些调整,逐渐稳定为int32位,long可以有多种定义,可以是32位,也可以是64位。
       C++标准上只是说long至少要和int一样大,所有整数类型实现时要满足如下规范:
       sizeof(char)  ==  1
       sizeof(char)  <=  sizeof(short)
       sizeof(short)  <=  sizeof(int) 
       sizeof(int)  <=  sizeof(long)
       sizeof(long)  <=  sizeof(long long)
           除了char和long long,其余的类型范围较灵活,都是平台相关的,与实现相关。如果要实现平台独立的话,在windows平台上,就有__intn可以使用,n代表位数。__int8   __int16   __int32   __int64。
   如果要使用的数字超过了long的范围,可以使用long long变量声明。

浮点数 float, double:
  
32位和64位机器:float 4byte,double 8byte,long double 至少8byte
  通常使用 E 符号来表示浮点值。以 E 符号表示,数字 47 281.97 就应该是 4.728 197E4。E 前的数字部分是尾数,E 之后的部分是 10 的幂。
十进制法科学计数法E 符号表示法
247.91 2.4791 X102 2.4791E2
0.00072 7.2 X10-4 7.2E-4
2 900 000 2.9 X106 2.9E6

  在 PC 上的浮点数据类型的大小和范围
数据类型关键字大小范 围有效数字
单精度 float 4字节 数字介于 ±3.4E-38 和 ±3.4E38 之间 7
双精度 double 8字节 数字介于 ±1.7E-308 和 ±1.7E308 之间 16
高双精度 long double 8字节 数字介于 ±1.7E-308 和 ±1.7E308 之间 16
  浮点类型转为整型变量会直接舍弃小数点后的值 :
  double dVal = 1.234;
  int iVal = dVal; // iVal = 1

二.类型修饰关键字()

 

 

asm: 

验证环境Visual Studio 2017 x86:

int a(1), b(2);

int* c = &a;

__asm
{
  mov eax, c;
  mov eax, [eax];
  mov ebx, b;
  lea eax, [eax + ebx];
  mov a, eax;
}

:a = 3 (只实验了最简单的一些嵌入汇编)

 

 

break:

用来跳出循环或switch。只会跳出当前一层循环

switch 和 case:

switch和case需要搭配使用

 

throw, try, catch:(有点复杂。。。)

在C++标准中,只规定catch(…)必须能捕获程序中所有通过throw语句抛出的异常

参考:https://blog.csdn.net/windhaunting/article/details/4735338?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param

https://www.itranslater.com/qa/details/2583825627723858944

 

throw, try, catch:(有点复杂。。。)

后续慢慢添加。。。

 

参考:

https://www.cnblogs.com/fanzhidongyzby/archive/2012/11/07/2759326.html 

https://zhuanlan.zhihu.com/p/37908790

http://c.biancheng.net/view/1321.html

 

posted on 2020-09-09 19:15  林西索  阅读(270)  评论(1)    收藏  举报