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.迷惑人的;令人容易上當的;引人注目的;令人感興趣的