• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > 深入解析C++编程中__alignof 与__uuidof运算符的使用

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

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了alignof,c++运算符重载,c++ 运算符,c++位运算,c++运算符优先级等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

__alignof 运算符
C++11 引入 alignof 运算符,该运算符返回指定类型的对齐方式(以字节为单位)。为实现最大的可移植性,应使用 alignof 运算符,而不是特定于 Microsoft 的 __alignof 运算符。
返回一个 size_t 类型的值,该值是类型的对齐要求。
语法

    __alignof( 
  type 
)
</div>

备注
例如:

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
</div>

在该示例中,__alignof 值是结构中的最大元素的对齐要求。
同样,

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

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


__uuidof 运算符

检索 GUID 并附加到表达式。
语法

   __uuidof (
  expression 
)
</div>

备注
该 表达式 可以是类型名称、指针、引用或该类型的数组、特定类型的模板或这些类型的变量。只要编译器可以使用它查找附加的 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);
}

</div>

注释
当库名不再在范围之内,你可以使用__LIBID_而不是 __uuidof。例如:

StringFromCLSID(__LIBID_, &lpolestr);

</div>

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

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

相关文章

  • 2017-05-28c++ String去除头尾空格的方法
  • 2017-05-28浅谈C++中的string 类型占几个字节
  • 2017-05-28Vc++ 控件List Control用法总结
  • 2017-05-28linux下C语言中的mkdir函数与rmdir函数
  • 2017-05-28C++ 智能指针深入解析
  • 2017-05-28c++ 编程 几个有用的宏详解
  • 2017-05-28C语言数据结构二叉树简单应用
  • 2017-05-28深入解析设计模式中的适配器模式在C++中的运用
  • 2017-05-28标准C++类string的Copy-On-Write技术
  • 2017-05-28初学C++之自定义类型名简化详解

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C++中对象的常引用、动态建立和释放相关知识讲解
    • 大数(高精度数)模板(分享)
    • Windows消息传递机制详解
    • C语言枚举类型(C语言enum用法)详解
    • 利用C语言来求最大连续子序列乘积的方法
    • 在Visual Studio使用C++开发Metro应用
    • udp socket客户端和udp服务端程序示例分享
    • VC6.0常见链接错误与解决方法
    • C++实现单链表删除倒数第k个节点的方法
    • 在屏幕上输出各种类型的数据

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有