C++关键字
目前的C++ 11标准一共有73个关键字,我们平时能用到的关键字就那么几个,大多的关键字老师不会交,教科书上也不会详细涉及到,但楼主就是很倔,就是想了解一下这些关键在到底在干什么!所以让我们来探讨一下这些关键字能干什么。
1.关键字列表
alignas | continue | friend | register | true |
alignof | decltype | goto | reinterpret_cast | try |
asm | default | if | return | typedef |
auto | delete | inline | short | typeid |
bool | do | int | signed | typename |
break | double | long | sizeof | union |
case | dynamic_cast | mutable | static | unsigned |
catch | else | namespace | static_assert | using |
char | enum | new | static_cast | virtual |
char16_t | explicit | noexcept | struct | void |
char32_t | export | nullptr | switch | volatile |
class | extern | operator | template | wchar_t |
const | false | private | this | while |
constexpr | float | protected | thread_local | |
const_cast | for | public | throw |
注:部分关键字是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的变量必须始终保持一种类型
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.迷惑人的;令人容易上当的;引人注目的;令人感兴趣的