C++关键字 (一)

    xiaoxiao2021-03-25  347

    C++关键字

    C关键字 关键字列表 alignas alignof asmauto 自动类型识别返回值占位 boolbreakcasecatch

     目前的C++ 11标准一共有73个关键字,我们平时能用到的关键字就那么几个,大多的关键字老师不会交,教科书上也不会详细涉及到,但楼主就是很倔,就是想了解一下这些关键在到底在干什么!所以让我们来探讨一下这些关键字能干什么。


    1.关键字列表

    alignascontinuefriendregistertruealignofdecltypegotoreinterpret_casttryasmdefaultifreturntypedefautodeleteinlineshorttypeidbooldointsignedtypenamebreakdoublelongsizeofunioncasedynamic_castmutablestaticunsignedcatchelsenamespacestatic_assertusingcharenumnewstatic_castvirtualchar16_texplicitnoexceptstructvoidchar32_texportnullptrswitchvolatileclassexternoperatortemplatewchar_tconstfalseprivatethiswhileconstexprfloatprotectedthread_localconst_castforpublicthrow

    注:部分关键字是C++11 新增的,用*标注,而C++11 的关键字在老式的编译器上并不能识别,大佬(姥)们是时候用新的编译器了。

    1. alignas *

    align 英 [əˈlaɪn] 美 [əˈlaɪn] vt.使成一线,使结盟; 排整齐; vi.排列; 成一条线; 变形 过去式: aligned 过去分词: aligned 现在分词: aligning 第三人称单数: aligns

     alignas 的作用是用于设置内存地址的对齐,比如拿int来说两个变量的地址如下    而用alignas去设置内存地址,就会出现    这里a的对齐方式为16 就会有a的地址能被16整除,同理b的能被8整除。这样的好处在于提高效率和兼容性。就是这么个特性,多了我也不懂,  详情请参考audi2的博客

    2. alignof *

       传入变量,根据变量类型,或者自己设置的alignos的大小,可用来返回变量的字节大小,和sizeof·有点相似,但sizeof能得到基本类型的字节大小  

    3.asm

      asm用来嵌入汇编代码 一种方式是 _asm 后加{} __asm { mov eax, c //c中存储的a的地址->eax mov eax, [eax] //a的值->eax add eax,1 mov a,eax } 另一种方式是 __asm 后加一行代码 __asm mov eax, c __asm mov eax, [eax] __asm add eax,1 __asm mov a,eax

    4.auto

    auto 英 [ˈɔ:təʊ] 美 [ˈɔ:toʊ] n.<美>汽车,自动 vi.乘汽车

    auto并不陌生,C语言中也有这个关键字,但是C++中auto稍微与C语言的关键字不同 这里只介绍C++的新标准

    1. 自动类型识别

    auto a = 10; auto b =’a’; auto c =1.1; 当如此定义变量时,编译器会自动识别a,b,c的类型为 整型,字符型,和浮点型,可以减轻程序员的负担。需要注意的是必须初始化变量的值。

    template < class T, class U> void Multiply(T t, U u) { auto v = t * u; } 如果不使用auto ,则程序员很难确定v的类型,因此把锅甩给编译器,让编译器去判断类型,就很容易。

    2. 返回值占位

    template < typename T1, typename T2> auto compose(T1 t1, T2 t2) -> decltype(t1 + t2) { return t1+t2; } auto v = compose(2, 3.14); // v’s type is double 更根据函数的返回类型,来识别v的类型,这就很神奇。

    注意事项:

    auto 必须初始化auto 不可与其他类型一起用,如auto int a ;使用函数模板时不可用auto ,如template < auto T> 动态内存分配,即定义在堆上的变量 int* p = new auto(0); ,必须进行初始化auto 是一个占位符,而不是一种类型,不能用 sizeof 来计算字节数,不能使用强制类型转换将它转换为基本数据类型。且auto的变量必须始终保持一种类型

    【C++11】新特性——auto的使用

    bool

    布尔型变量,基本数据类型,表示真假,true 或者false非0为真,0为假。

    break

    break 英 [breɪk] 美 [brek] vt.(使)破;打破(纪录);(常指好天气)突变;开始 vi.突破;(嗓音)突变;破晓;(价格)突然下跌 n.破裂;中间休息;间断;短假

    break 用于终止循环和switch 中终止case 选项

    case

    case 英 [keɪs] 美 [kes] n.(实)例,事例;情况,状况;诉讼(事件),案件,判例;容器(箱,盒) vt.把…装入箱(或盒等)内;加盖于;包围,围住;[俚语](尤指盗窃前)探察,侦查,窥测

    case 用于switch选择语句中,case 后面必须是一个常量,与switch ()中的变量同种类型。

    #include<iostream> using namespace std; int main() { int a[4]={1,2,3,4}; int b; cin>>b; switch(b) { case 1: //常量加: cout<<"1"<<endl;break; case 2:case 3: //可以跟多个case 选项 cout<<"2or3"<<endl;break; case 4: cout<<"4"<<endl;break; defalult: //除case 选项之外如果还有其他选项则进入此句。 //前面每句都要加上break,而最后一句不要多此一举 cout<<"!!!"<<endl; }

    catch

    catch 英 [kætʃ] 美 [kætʃ, kɛtʃ] vt.赶上;接住;引起;看见 vt.& vi.(使)被钩住,(使)被卡住 n.抓;隐情;捕获量;挂钩 vi.锁住;着火;[棒球]当接球手 adj.迷惑人的;令人容易上当的;引人注目的;令人感兴趣的

    转载请注明原文地址: https://ju.6miu.com/read-174.html

    最新回复(0)