国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

深入解析C++編程中__alignof 與__uuidof運算符的使用

2020-01-26 14:46:54
字體:
來源:轉載
供稿:網友

__alignof 運算符
C++11 引入 alignof 運算符,該運算符返回指定類型的對齊方式(以字節為單位)。為實現最大的可移植性,應使用 alignof 運算符,而不是特定于 Microsoft 的 __alignof 運算符。
返回一個 size_t 類型的值,該值是類型的對齊要求。
語法

    __alignof(   type )

備注
例如:

Expression
__alignof( char ) 1
__alignof( short ) 2
__alignof( int ) 4
__alignof( __int64 ) 8
__alignof( float ) 4
__alignof( double ) 8
__alignof( char* ) 4

__alignof 值與基本類型的 sizeof 的值相同。但是,請考慮該示例:

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 sizeS* 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);


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 义马市| 昭平县| 延长县| 浦北县| 三原县| 湘乡市| 新河县| 岳普湖县| 台中市| 塔河县| 舟曲县| 建瓯市| 比如县| 喀什市| 宜兴市| 汕头市| 阳泉市| 寿宁县| 招远市| 监利县| 宜昌市| 读书| 拜城县| 建阳市| 皮山县| 射阳县| 肥城市| 乐都县| 定兴县| 彩票| 黔东| 溧水县| 句容市| 桦甸市| 盱眙县| 陇西县| 咸宁市| 崇明县| 余江县| 深水埗区| 濮阳市|