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

首頁(yè) > 編程 > C++ > 正文

深入解析C++編程中__alignof 與__uuidof運(yùn)算符的使用

2020-05-23 14:10:56
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
這篇文章主要介紹了C++編程中__alignof 與__uuidof運(yùn)算符的使用,是C++入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
 

__alignof 運(yùn)算符
C++11 引入 alignof 運(yùn)算符,該運(yùn)算符返回指定類型的對(duì)齊方式(以字節(jié)為單位)。為實(shí)現(xiàn)最大的可移植性,應(yīng)使用 alignof 運(yùn)算符,而不是特定于 Microsoft 的 __alignof 運(yùn)算符。
返回一個(gè) size_t 類型的值,該值是類型的對(duì)齊要求。
語(yǔ)法

    __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 的值相同。但是,請(qǐng)考慮該示例:

 

typedef struct { int a; double b; } S;// __alignof(S) == 8

在該示例中,__alignof 值是結(jié)構(gòu)中的最大元素的對(duì)齊要求。
同樣,

 

復(fù)制代碼代碼如下:

 

typedef __declspec(align(32)) struct { int a; } S;

 


__alignof(S) 等于 32。
__alignof 的用途之一是作為某個(gè)內(nèi)存分配例程的參數(shù)。例如,假定下面定義的結(jié)構(gòu) S,您可以調(diào)用名為 aligned_malloc 的內(nèi)存分配例程以在特定對(duì)齊邊界上分配內(nèi)存。

 

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 運(yùn)算符

檢索 GUID 并附加到表達(dá)式。
語(yǔ)法

   __uuidof (  expression )

備注
該 表達(dá)式 可以是類型名稱、指針、引用或該類型的數(shù)組、特定類型的模板或這些類型的變量。只要編譯器可以使用它查找附加的 GUID,自變量就是有效的。
內(nèi)部函數(shù)的一個(gè)特例就是當(dāng)在 0 或 NULL 中作為參數(shù)提供。在這種情況下,__uuidof 將返回由零組成的GUID。
使用此關(guān)鍵字用以提取附加的 GUID:
一個(gè)對(duì)象通過(guò) uuid 擴(kuò)展其特性。
庫(kù)塊以使用 模塊 屬性創(chuàng)建。
System_CAPS_note注意
在調(diào)試版本中,__uuidof 總是動(dòng)態(tài)初始化一個(gè)對(duì)象 (運(yùn)行時(shí))。當(dāng)發(fā)布版本時(shí),__uuidof 可以靜態(tài)初始化對(duì)象(在編譯時(shí))。
下面的代碼 (使用ole32.lib編譯) 將顯示一個(gè)創(chuàng)建模塊屬性庫(kù)塊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);}

注釋
當(dāng)庫(kù)名不再在范圍之內(nèi),你可以使用__LIBID_而不是 __uuidof。例如:

 

復(fù)制代碼代碼如下:

StringFromCLSID(__LIBID_, &lpolestr);

 



發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 迭部县| 木里| 林口县| 双柏县| 上虞市| 通道| 莲花县| 哈密市| 吉隆县| 颍上县| 平凉市| 财经| 报价| 廉江市| 金乡县| 贵定县| 长岛县| 天水市| 新郑市| 阿巴嘎旗| 沾化县| 丰宁| 义乌市| 姜堰市| 正安县| 静宁县| 永川市| 汉沽区| 长治市| 会昌县| 沈阳市| 故城县| 沾益县| 茂名市| 遵化市| 嵊州市| 平原县| 金溪县| 土默特左旗| 上林县| 龙江县|