C++中关于类型的一些术语

用12个实例来解释几个C++概念:POD,cv-qualified,trivial,aggregate type <! /* Style Definitions */ table.MsoNormalTable {mso-style-name:"Table Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority:99; ms 阅读详情
 
   本文主要介绍一下C++标准中关于类型的一些术语。如果文中有错误或遗漏之处,敬请指出,谢谢!
   作者: tyc611, 2007-01-10 

  1. CV-qualifiers(CV限定符)
       CV-qualifiers有三种:const-qualifier(const限定符)、volatile-qualifier(volatile限定符)、以及const-volatile-qualifier(const-volatile限定符)。

       用CV-qulifiers限定和未被CV-qulifiers限定的类型是不同的类型,但它们有相同的表示和对齐方式。

       const类对象的非静态、非mutable、以及非引用数据成员是const-qualified;
       volatile类对象的非静态、非引用数据成员是volatile-qualified;
       const-volatile类对象的非静态、非引用数据成员是const-volatile-qualified。

       当CV-qualifiers用于限定数组类型时,实际上是数组成员被该CV-qualifiers限定,而非该数组类型。

       复合类型并不因其成员被CV-qualifier限定而被该CV-qualifier限定,也就是说,即使复合类型的成员有CV-qualifier限定,该复合类型也不是CV-qualified对象。

       CV-qualifiers中的偏序关系:我们说A比B更多地被CV-qualifiers限定,记作B<A,这种关系如下所示:
      
       no CV-qualiifer < const
       no CV-qualifier < volatile
       no CV-qualifier < const-volatile
                 const < const-volatile
              volatile < const-volatile

      
  2. incompletely-defind object type——非完整定义对象类型
       指那些只有声明没有定义的类,或者不知大小的数组,或者其元素是非完整类型的数组。
  3. incomplete types——非完整类型
       指非完整定义对象类型和void类型。

    例如:
    class X;            // X 是一个非完整类型
    extern X* xp;       // xp是一个指向一个非完整类型的指针
    extern int arr[];   // arr的类型是非完整的
    typedef int UNKA[]; // UNKA是一个非完整类型
    UNKA* arrp;         // arrp是一个指向一个非完整类型的指针

    void foo()
    {
       xp++;       // ill-formed: X is incomplete
       arrp++;     // ill-formed: incomplete type
    }

    struct X { int i; }; // now X is a complete type
    int arr[10];         // now the type of arr is complete
    X x;

    void bar()
    {
       xp = &x;       // OK:type is “pointer to X”
       arrp = &arr;   // ill-formed: different types
       xp++;          // OK: X is complete
       arrp++;        // ill-formed: UNKA can’t be completed
    }



  4. object type——对象类型
       非函数类型、非引用类型、非void类型的类型(可以被CV-qualifiers限定),叫对象类型。

  5. scalar type——标量类型(或纯量类型)
       算术类型、枚举类型、指针类型、成员指针类型(pointer to member types)、以及由CV-qulifiers限定的前面这些类型,都叫做标量类型。

  6. POD types(POD,Plain Old Data)——POD类型
       标量类型、POD-struct类型、POD-union类型、以及这些类型的数组或CV-qulifiers限定版本,统称为POD类型。
       对于POD类型T的对象,不管这个对象是否拥有类型T的有效值,如果将该对象的底层字节序列拷贝到一个字符数组(或者无符号字符数组)中,再将其拷贝回对象,那么该对象的值与原始值一样。例如:
      

    #define N sizeof(T)
    char buf[N];
    T obj;
    memcpy(buf, &obj, N);
    memcpy(&obj, buf, N); //此时obj的值与原始值相同


      对于任意的POD类型T,如果两个T指针分别指向两个不同的对象obj1和obj2,如果用memcpy库函数把obj1的值拷贝到obj2,那么obj2将拥有与obj1相同的值。例如:
     

    T* p1;
    T* p2;  
    // provided that p1 points to an initialized object

    memcpy(p2, p1, sizeof(T));
    // at this point, every subobject of POD type

                               // in *p2 contains the same value as the

                               // corresponding subobject in *p1



    • static type——静态类型
         表达式的静态类型是指不考虑程序的执行语义,而仅从程序分析所得到的结果类型。表达式的静态类型只依赖于它所处的程序,在程序运行时不会改变。

    • dynamic type——动态类型
         左值表达式的动态类型是指其在类的继承关系中的最底层派生类(the most derived object)的类型;
         右值表达式的动态类型是它的静态类型。

      例如,有如下代码:
      class B {};
      class D: public B {};
      class DD: public D {};

      B* p;
      p = new DD;

      指针p的静态类型是B*,而p实际上指向一个B的派生类D的对象,那么*p的动态类型就是DD。


   如果文中有错误或遗漏之处,敬请指出,谢谢!


参考资料:
[1] C++标准文档:ISO/IEC 14882:1998
C++常用术语及其英文翻译的含义和简单用途总结(二) (1)地址(address)是一个数字,根据它可以找到内存中的一个字节。 (2)别名声明(alies declaration)为一种类型定义一个同义词:使用“名字 = 类型”的格式将名字作为该类型的同义词,行使相同的功能。  (3)算术类型(arithmetic type)布尔值、字符、整数、浮点数等内置类型。 (4)数组(array)是一种数据结构,存放着一组未命名 阅读详情

相关推荐

汽车租赁管理系统源码实战:从部署到核心业务逻辑落地

在前后端分离架构日益普及的今天,基于Spring Boot与Vue的全栈管理类项目成为开发者快速掌握工程实践的重要入口。汽车租赁管理系统作为典型业务场景,覆盖车辆、客户、订单三大核心实体,其源码包整合了数据库脚本、接口文档与演示视频,能帮助学习者清晰理解从建库、启动到业务闭环的完整链路。文章从系统部署入手,剖析了数据库表设计、权限模型、租金与罚款计算、订单状态机以及常见环境兼容性问题,并给出了实际操作建议。无论是课程设计、毕设参考,还是希望快速上手全栈开发的读者,都能借助这一案例建立从代码到业务的映射,避免

weixin_34205826的博客 388

C++语言学习(五)——C++语言中的CV限定符错误

C++语言学习(五)——C++语言中的CV限定符错误 一、CV限定符错误简介 1、CV限定符简介 CV限定符即cv-qualifier,C++语言中指const和volatile限定符。通常,C++语言中有两种情况不能使用CV限定符进行限定:A、非成员函数不能使用CV限定B、静态成员函数不能使用CV限定 2、CV限定符错误信息简介 C++语言中CV限定符错误信息如“cannot have cv-...

weixin_34137799的博客 526

matlab生成blocks、bumps和doppler标准测试信号

关键函数:wnoise使用方式X = wnoise(FUN,N) [X,XN] = wnoise(FUN,N,SQRT_SNR) [X,XN] = wnoise(FUN,N,SQRT_SNR,INIT)X = wnoise(FUN,N) 返回由 FUN给出的信号,长度为2^N,幅值范围[0,1].[X,XN] = wnoise(FUN,N,SQRT_SNR) ,返回了一个测试信号X,以及一个加噪

ZSZ_shsf的博客 6581

【C++类型】C++的POD和CV-qualified类型介绍

POD 类型 和 cv-qualified

好好学习,天天向上~ 491

智能车‘大脑’的诞生:揭秘电磁循迹代码背后的控制论与系统思维

本文深入探讨智能车电磁循迹系统的核心架构与控制原理,揭示了其作为精密闭环系统如何通过模块化设计、信号处理、PID控制算法及电机驱动实现自主导航。重点分析了电磁信号采集与处理流程框架,为开发者提供从理论到实践的全面指南。

arduino9maker的博客 531

零基础玩转华为AP 4050DN-HD:FAT模式家庭无线网络配置实战

本文为零基础用户提供华为AP 4050DN-HD从FIT模式转换为FAT模式的完整实战教程。详细介绍了固件升级、模式转换以及配置家庭无线网络(包括路由、DHCP、Wi-Fi和NAT)的每一步操作,帮助用户将企业级瘦AP改造为高性能家庭胖AP,打造稳定可靠的家庭网络环境。

weixin_29196613的博客 631

CV-qualifier

Const Volatile qualifier.

Job Log 750

点云欧式聚类快速了解

一种基于欧氏距离度量的聚类算法基于KD-Tree的近邻查询算法是加速欧式聚类算法的重要预处理方法KD-Tree是由二分搜索树演变而来的用于大规模高维度数据查找场景当中的索引结构,主要用于最近邻查找和近似最近邻查找。将整个空间划分为二叉树的形式,方便有效找到最近邻点云处理算法库PCL,是比较重要的,在后续会继续学习,然后发出更优质的文章。

xiaobaiwsc的博客 1722

C++11 内存布局术语解读(平凡类型、平凡可复制类型、标准布局类型)

说明:在C++11中,平凡类型(Trivial Type)、平凡可复制类型(TrivialCopyable)、标准布局类型(Standard-layout Type)是描述类在内存中布局特性的术语,它们与类的构造、拷贝、赋值和销毁行为有关,也影响着类的内存布局和对齐方式。下面用通俗的语言解释这些概念:平凡类型:指那些在内存中的行为非常简单的类。它们的构造函数、析构函数、拷贝构造函数和赋值运算符都没有自定义实现,完全由编译器提供的默认行为即可。

wangdsh的博客 2652

【光子AI / Photon.AI】manus 通用 Agent 的实现核心技术原理与应用

摘要 Manus是一款由国内团队开发的通用AI Agent,其核心技术原理基于多智能体协作架构、云端全能沙箱、规划-执行-反思循环等系统工程方法。与传统的对话式AI不同,Manus能够在独立的Linux虚拟机环境中自主规划并执行复杂任务,通过编写和运行代码来解决问题,具备强大的纠错能力和工具使用能力。 核心应用场景包括深度行业研究、自动化办公、生活助理、辅助编程和跨平台信息整合等。Manus的工程化落地优势体现在沙箱环境、多智能体调度和容错机制等方面,使其能够完成需要多步骤操作和多种工具调用的复杂任务,将A

AI天才研究院 667

第12步 支持向量机(SVM)

搭建SVM

Jet4505的博客 1051

C++17标准:第3章 术语和定义

C++17标准:第3章 术语和定义

北辰 654

【Linux命令大全】006.网络通讯之write命令(实操篇)

Linux write命令摘要 write是Linux系统中用于用户间实时通讯的命令工具,允许向其他登录用户的终端发送消息。主要功能包括: 基本使用:通过write username向指定用户发送消息,Ctrl+D结束输入 终端指定:当用户登录多个终端时,可用write username tty指定目标终端 实用技巧: 使用who查看在线用户 通过管道发送单行消息:echo "内容" | write user 支持多行消息发送和简单聊天会话。

yuhuasheng1997的博客 214

C++ Primer术语表

C++ Primer术语表总结,方便初学者熟悉有关C++的基本概念

weixin_43739503的博客 823

windows一键安装部署wvp-GB28181-pro视频监控平台

我们可以看到redis、mysql、zlm和wvp都正常运行了。该ip需要修改为wvp服务安装的 服务器的IP。默认用户名和密码分别为admin和admin。

zengliguang的专栏 5749

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

C/C++前置知识之术语表

C/C++前置知识之术语表 前言 **C/C++**的学习是一个持续的输入输出过程。而大量的术语、关键字对于新手而言比较不友好,让大家望而生难意。大家可以先掌握一定的前置知识,简单点说,就是先不明就里地灌一点汤,然后结合自己的理解慢慢品;还有一种大家比较推荐的方法,也符合我们认知的过程:就是在实践过程中,也就是敲代码的过程中,借助注释去慢慢理解程序,遇到不懂的就查,这是一个熟能生巧的过程。 加粗样式 本篇以经典教材***《C++ Primer中文版》***为来源,逐章为大家呈现C++术语,给出最精确的定义

算法、原理、设计模式、非线性控制、深度强化学习 277

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

2024-11-13-C++ 学习:数组和vector+术语表( Primer 第三章)(3)

数组和vector+术语表

weixin_42269028的博客 986

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

C++术语 【from C++ Primer 第1章 快速入门】

C++术语 【from C++ Primer 第1章 快速入门】 argument(实参) 传递给被调用函数的值。 block(块) 花括号括起来的语句序列。 buffer(缓冲区) 一段用来存放数据的存储区域。IO设备常存储输入(或输出)到缓冲区,并独立于程序动作对缓冲区进行读写。输出缓冲区通常必须显式刷新以强制输出缓冲区内容。默认情况下,读 cin 会刷新 cout;当程序正常...

weixin_30276935的博客 204

【C++】C++常用术语

1.access labels(访问标号) 类的成员可以定义为 private,这能够防止使用该类型的代码访问该成 员。成员还可以定义为 public,这将使该整个程序中都可访问成员。 2.address(地址) 一个数字,通过该数字可在存储器上找到一个字节。 3.arithmetic types(算术类型) 表示数值即整数和浮点数的类型。浮点型值有三种类型:long double 、...

茗染云华 荆挑赋樱 895

2024-11-10-C++ 学习:变量和基本类型课后习题( Primer 第二章 )(选做)

多做题,多思考,多记多背,加油~

weixin_42269028的博客 1056

C++术语

==================================== 空闲的时候收集C++术语,打字的时候可以加深印象。haihai187 ==================================== argument(实参)传递给被调用函数的值。 block(块)花括号括起来的语句序列。 buffer(缓冲区)一段用来存放数据的存储区域。IO设备常存储输入(或...

weixin_30483495的博客 64

变量和基本类型_术语表

地址(address) 是一个数字,根据它可以找到内存中的一个字节。 别名声明(alias declaration) 为另外一种类型定义一个同义词:使用“名字=类型”的格式将名字作为该类型的同义词。 算术类型(arithmetic type) 布尔值、字符、整数、浮点数等内置类型。 数组(array) 是一种数据结构,存放着一组未命名的对象,可以通过索引来访问这些对象。 auto ...

Gong胖子的专栏 545

C++ 术语

术语   argument(实参)           传递给被调用函数的值。   block(块)           花括号括起来的语句序列。   buffer(缓冲区)           一段用来存放数据的存储区域。IO 设备常存储输入(或输出)到缓冲区,         并独立于程序动作对缓冲区进行读写。输出缓冲区通常必须显式刷新以强         制输

xzm_cn 1337

常见计算机英语术语小综(一)

argument (实参) parameter list (形参表) block (块) 语句块,花括号括起来的语句序列 buffer (缓冲区) built-in type (内置类型) cerr 绑定到标准错误的ostream对象,默认输出不缓冲,通常用于不是程序逻辑部分的错误信息或其他输出 clog 绑定到标准错误的ostream对象,默认输出带缓冲,通常用于将程序执行信息写入到...

weixin_30478757的博客 171
上一篇: 静态类型和动态类型
下一篇: 如何在运行时确定对象类型(RTTI)
SearchLife
博客等级 码龄20年 51粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值