深刻解析C++編程中__alignof 與__uuidof運算符的應用。本站提示廣大學習愛好者:(深刻解析C++編程中__alignof 與__uuidof運算符的應用)文章只能為提供參考,不一定能成為您想要的結果。以下是深刻解析C++編程中__alignof 與__uuidof運算符的應用正文
__alignof 運算符
C++11 引入 alignof 運算符,該運算符前往指定類型的對齊方法(以字節為單元)。為完成最年夜的可移植性,應應用 alignof 運算符,而不是特定於 Microsoft 的 __alignof 運算符。
前往一個 size_t 類型的值,該值是類型的對齊請求。
語法
__alignof( type )
備注
例如:
typedef struct { int a; double b; } S; // __alignof(S) == 8
在該示例中,__alignof 值是構造中的最年夜元素的對齊請求。
異樣,
typedef __declspec(align(32)) struct { int a; } S;
__alignof(S) 等於 32。
__alignof 的用處之一是作為某個內存分派例程的參數。例如,假定上面界說的構造 S,您可以挪用名為 aligned_malloc 的內存分派例程以在特定對齊界限上分派內存。
typedef __declspec(align(32)) struct { int a; double b; } S; int n = 50; // array size S* p = (S*)aligned_malloc(n * sizeof(S), __alignof(S));
__uuidof 運算符
檢索 GUID 並附加到表達式。
語法
__uuidof ( expression )
備注
該 表達式 可所以類型稱號、指針、援用或該類型的數組、特定類型的模板或這些類型的變量。只需編譯器可使用它查找附加的 GUID,自變量就是有用的。
外部函數的一個特例就是當在 0 或 NULL 中作為參數供給。在這類情形下,__uuidof 將前往由零構成的GUID。
應用此症結字用以提取附加的 GUID:
一個對象經由過程 uuid 擴大其特征。
庫塊以應用 模塊 屬性創立。
System_CAPS_note留意
在調試版本中,__uuidof 老是靜態初始化一個對象 (運轉時)。當宣布版本時,__uuidof 可以靜態初始化對象(在編譯時)。
上面的代碼 (應用ole32.lib編譯) 將顯示一個創立模塊屬性庫塊uuid:
// expre_uuidof.cpp // compile with: ole32.lib #include "stdio.h" #include "windows.h" [emitidl]; [module(name="MyLib")]; [export] struct stuff { int i; }; int main() { LPOLESTR lpolestr; StringFromCLSID(__uuidof(MyLib), &lpolestr); wprintf_s(L"%s", lpolestr); CoTaskMemFree(lpolestr); }
正文
當庫名不再在規模以內,你可使用__LIBID_而不是 __uuidof。例如:
StringFromCLSID(__LIBID_, &lpolestr);