程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 深刻解析C++編程中__alignof 與__uuidof運算符的應用

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

編輯:關於C++

深刻解析C++編程中__alignof 與__uuidof運算符的應用。本站提示廣大學習愛好者:(深刻解析C++編程中__alignof 與__uuidof運算符的應用)文章只能為提供參考,不一定能成為您想要的結果。以下是深刻解析C++編程中__alignof 與__uuidof運算符的應用正文


__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 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);


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved