C++关键字 (一)

C++关键字

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


1.关键字列表

alignascontinuefriendregistertrue
alignofdecltypegotoreinterpret_casttry
asmdefaultifreturntypedef
autodeleteinlineshorttypeid
booldointsignedtypename
breakdoublelongsizeofunion
casedynamic_castmutablestaticunsigned
catchelsenamespacestatic_assertusing
charenumnewstatic_castvirtual
char16_texplicitnoexceptstructvoid
char32_texportnullptrswitchvolatile
classexternoperatortemplatewchar_t
constfalseprivatethiswhile
constexprfloatprotectedthread_local
const_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的类型,这就很神奇。

注意事项:

  1. auto 必须初始化
  2. auto 不可与其他类型一起用,如auto int a ;
  3. 使用函数模板时不可用auto ,如template < auto T>
  4. 动态内存分配,即定义在堆上的变量 int* p = new auto(0); ,必须进行初始化
  5. 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.迷惑人的;令人容易上当的;引人注目的;令人感兴趣的

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值