码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • C++标准模板(STL)- 类型支持 (属性查询,获取类型的对齐要求)


    类型特性


    类型特性定义一个编译时基于模板的结构,以查询或修改类型的属性。

    试图特化定义于 头文件的模板导致未定义行为,除了 std::common_type 可依照其所描述特化。

    定义于头文件的模板可以用不完整类型实例化,除非另外有指定,尽管通常禁止以不完整类型实例化标准库模板。
     

    属性查询

    继承自 std::integral_constant

    成员常量

    value

    [静态]

    alignof(T)
    (公开静态成员常量)

    成员函数

    operator std::size_t

    转换对象为 std::size_t ,返回 value
    (公开成员函数)

    operator()

    (C++14)

    返回 value
    (公开成员函数)

    成员类型

    类型定义
    value_typestd::size_t
    type

    std::integral_constant

    获取类型的对齐要求

    std::alignment_of

    template< class T >
    struct alignment_of;

    (C++11 起)

    提供等于 T 类型对齐要求的成员常量 value ,如同用 alignof 表达式获得。若 T 是数组类型,则返回元素类型的对齐要求,若 T 是引用类型,则返回备用用类型的对齐要求。

    若 alignof(T) 不是合法表达式,则行为未定义。

    辅助变量模板

    template< class T >
    inline constexpr std::size_t alignment_of_v = alignment_of::value;

    (C++17 起)

     可能的实现

    1. template< class T >
    2. struct alignment_of :
    3. std::integral_constant<std::size_t,alignof(T)> {};

    注意

    此类型特性先于 alignof 关键词出现,该关键词能用于较简明地获得相同值。

    调用示例

    1. #include <iostream>
    2. #include <type_traits>
    3. class A {};
    4. class B
    5. {
    6. int b;
    7. };
    8. class C
    9. {
    10. int b;
    11. double c;
    12. };
    13. int main()
    14. {
    15. std::cout << "std::alignment_of::value: "
    16. << std::alignment_of<int>::value << std::endl;
    17. std::cout << "std::alignment_of::value: "
    18. << std::alignment_of<double>::value << std::endl;
    19. std::cout << "std::alignment_of::value: "
    20. << std::alignment_of<char>::value << std::endl;
    21. std::cout << "std::alignment_of::value: "
    22. << std::alignment_of<uint8_t>::value << std::endl;
    23. std::cout << "std::alignment_of::value: "
    24. << std::alignment_of<uint64_t>::value << std::endl;
    25. std::cout << "std::alignment_of::value:"
    26. << std::alignment_of<std::string>::value << std::endl;
    27. std::cout << "std::alignment_of::value: "
    28. << std::alignment_of<A>::value << std::endl;
    29. std::cout << "std::alignment_of(): "
    30. << std::alignment_of<A>() << std::endl; // 另一种语法
    31. std::cout << "std::alignment_of(): "
    32. << std::alignment_of<B>() << std::endl; // 另一种语法
    33. std::cout << "std::alignment_of(): "
    34. << std::alignment_of<C>() << std::endl; // 另一种语法
    35. return 0;
    36. }

    输出

  • 相关阅读:
    [EFI]华硕 Asus VivoBook S510UA 电脑 Hackintosh 黑苹果efi引导文件
    Linux 进程信息 system V-IPC 之消息队列
    【JVM笔记】强引用、软引用、弱引用、虚引用、终结器引用
    Vue2项目练手——通用后台管理项目第四节
    后端大厂面试-16道面试题
    【Yann LeCun点赞B站UP主使用Minecraft制作的红石神经网络】
    Leetcode1793. Maximum Score of a Good Subarray
    RPA流程调试:准确定位错误原因及位置
    【NM-01】独立于总线协议的NM模块调用图
    新服务入驻生产环境 CICD 全流程、自动化脚本教程
  • 原文地址:https://blog.csdn.net/qq_40788199/article/details/134358925
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号