C++關鍵字 (一)

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的類型,這就很神奇。

注意事項:

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章