深入解析C++编程中__alignof 与__uuidof运算符的使用

所属分类: 软件编程 / C 语言 阅读数: 38
收藏 0 赞 0 分享

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


更多精彩内容其他人还在看

详解C++ string字符串类

这篇文章主要介绍了C++ string字符串类,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

C++单例类模板详解

这篇文章主要介绍了C++单例类模板,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

C语言实现数据结构迷宫实验

这篇文章主要为大家详细介绍了C语言实现数据结构迷宫实验,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

C语言数据结构之迷宫问题

这篇文章主要为大家详细介绍了C语言数据结构之迷宫问题,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

C语言数据结构之迷宫求解问题

这篇文章主要为大家详细介绍了C语言数据结构之迷宫求解问题,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

C语言实现小学生考试系统

这篇文章主要为大家详细介绍了C语言实现小学生考试系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

C语言实现小学生随机出题测试计分

这篇文章主要为大家详细介绍了C语言实现小学生随机出题测试计分,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

C语言实现小学生计算机辅助教学系统

这篇文章主要为大家详细介绍了C语言实现小学生计算机辅助教学系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

详解C++中构造函数,拷贝构造函数和赋值函数的区别和实现

这篇文章主要介绍了C++中构造函数,拷贝构造函数和赋值函数的区别和实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

C语言清除scanf()缓存的案例讲解

今天小编就为大家分享一篇关于C语言清除scanf()缓存的案例讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享
查看更多