一些罕見的c 關鍵字

2021-08-07 16:24:43 字數 1148 閱讀 5828

一、typeid

typeid是乙個型別運算子,用於獲取某個變數或者型別的名字。

使用格式:typeid(int)或typeid(i+1)

例如:typeid(double).name();//獲取int型別名,結果為「double」。

typeid(2)!= typeid(2.0);//比較表示式型別,結果為true。

二、mutable

mutable的含義是可變的,和const關鍵字相對,用於修飾常成員函式,告知編譯器可以修改這個變數。

使用格式:mutable int var;//類內宣告

例如:class myclass

};三、volatile

volatile的意思是易變的,編譯器在編譯時期可能不能獲取變數是否被多個執行緒或者程序修改的資訊,用於確保乙個變數被多個執行緒操作的原子性。

使用格式:

volatile int a;

四、explicit

explicit的含義是顯式的,它和c++中的隱式轉換相關。例如:

double a=100;

編譯器會自動將整數100轉化為浮點型別。對於使用者資料型別,c++提供了轉換建構函式和型別轉換函式實現使用者資料型別和內建型別的相互轉換,而explicit是因為轉換建構函式而存在的。下面給出乙個轉換建構函式的例子:

class a

};void fun(a a)

fun(1);

最後的函式呼叫語句是合法的,雖然fun只接受a型別的引數,但是因為a的建構函式除了初始化a外,還提供了整數轉換為a型別的方式——轉換建構函式。但是有些情況下,這樣做可能是不利的,比如fun可能有單獨處理整形引數的過載,或者fun根本不需要轉換建構函式生成的物件。

五、likely和unlikely

likely() 與 unlikely()是linux核心中定義的兩個巨集。用於人為告訴編繹器一些分支**資訊「exp==c」是很可能發生的」。likely,執行if後面語句的可能性大些,編譯器將if{}是的內容編譯到前面;使用unlikely,執行else後面語句的可能性大些,編譯器將else{}裡的內容編譯到前面。這樣有利於cpu預取,提高預取指令的正確率,因而可提高效率。

例如:if(likely(foo))  //認為foo通常為1

if(unlikely(foo)) //認為foo通常為0

關鍵字 一些關鍵字用法總結

register 用register宣告的變數稱暫存器變數,在可能的情況下會直接存放在機器的暫存器中 但對32位編譯器不起作用,當global optimizations 全域性優化 開的時候,它會做出選擇是否放在自己的暫存器中 不過其它與register關鍵字有關的其它符號都對32位編譯器有效。c...

c語言的一些關鍵字

1.switch case case後面只能是整型或者字元型的常量或者常量表示式,並且不要忘記了加default switch b case 3 cout a 2.return 關鍵字 return用於終止乙個函式並返回其後面跟著的值,若果是表示式一般加上括號,規範性。但是return 不可以返回指...

c語言的一些關鍵字

保留關鍵字 char short int unsigned long float double struct union void enum signed const volatile typedef auto case continue default do else for goto if re...