当前位置: 首页 > news >正文

C++中所有数据类型

在C++中,数据类型可以分为几大类,包括基本数据类型、复合数据类型和用户自定义数据类型。以下是对C++中常见数据类型的详细分类和说明:

1. 基本数据类型

基本数据类型是C++语言预定义的类型,用于表示简单的数据值。它们是C++中最基本的构建块。

1.1 整数类型
  • int:用于表示整数。通常占用4字节(32位)。

  • short:短整型,通常占用2字节。

  • long:长整型,通常占用4字节或8字节(取决于平台)。

  • long long:扩展的长整型,通常占用8字节。

  • unsigned:无符号整型,表示非负整数。可以与intshortlonglong long结合使用,例如unsigned int

  • signed:有符号整型,默认情况下intshortlonglong long都是有符号的。

.12 浮点类型
  • float:单精度浮点数,通常占用4字节。

  • double:双精度浮点数,通常占用8字节。

  • long double:扩展精度浮点数,占用长度取决于平台,通常是12字节或16字节。

1.3 字符类型
  • char:用于表示字符,通常占用1字节。可以存储ASCII字符。

  • wchar_t:宽字符类型,用于存储宽字符(如Unicode字符),通常占用2字节或4字节。

  • char16_t:16位字符类型,用于存储UTF-16编码的字符。

  • char32_t:32位字符类型,用于存储UTF-32编码的字符。

1.4 布尔类型
  • bool:用于表示布尔值,通常占用1字节。值为truefalse

1.5 空类型
  • void:表示无类型,通常用于函数返回值或指针类型,表示“无”。

2. 复合数据类型

复合数据类型是由基本数据类型组合而成的复杂数据结构。

2.1 数组
  • 数组是一组相同类型的元素的集合,通过索引访问每个元素。例如:

    cpp

    复制

    int arr[5]; // 一个包含5个整数的数组
2.2 结构体(struct
  • 结构体是一种用户定义的数据类型,可以包含多个不同类型的成员变量。例如:

    cpp

    复制

    struct Person {string name;int age;
    };
2.3 联合体(union
  • 联合体是一种特殊的数据类型,可以存储多个不同类型的成员变量,但同一时间只能存储其中一个。所有成员共享同一块内存。例如:

    cpp

    复制

    union Data {int i;float f;
    };
2.4 枚举(enum
  • 枚举是一种用户定义的类型,用于定义一组命名的整数值。例如:

    cpp

    复制

    enum Color { RED, GREEN, BLUE };
2.5 类(class
  • 类是一种用户定义的数据类型,可以包含成员变量和成员函数。类是面向对象编程的核心。例如:

    cpp

    复制

    class Student {
    public:string name;int age;void display() {cout << name << " is " << age << " years old." << endl;}
    };

3. 指针和引用

  • 指针(pointer:指针是一个变量,用于存储另一个变量的内存地址。例如:

    cpp

    复制

    int* ptr; // 一个指向整数的指针
  • 引用(reference:引用是一个变量的别名,用于为变量提供另一个名称。例如:

    cpp

    复制

    int a = 10;
    int& ref = a; // ref是a的引用

4. 用户自定义数据类型

用户可以通过typedefusing关键字定义自己的数据类型。

4.1 typedef
  • typedef用于为现有类型定义一个新的名称。例如:

    cpp

    复制

    typedef int Integer;
    Integer a = 10; // 等同于 int a = 10;
4.2 using
  • using是C++11引入的语法,用于定义别名。例如:

    cpp

    复制

    using Integer = int;
    Integer a = 10; // 等同于 int a = 10;

5. 其他数据类型

  • auto:C++11引入的关键字,用于自动推导变量的类型。例如:

    cpp

    复制

    auto x = 10; // x的类型为int
    auto y = 3.14; // y的类型为double
  • decltype:C++11引入的关键字,用于获取表达式的类型。例如:

    cpp

    复制

    int a = 10;
    decltype(a) b = 20; // b的类型为int

6. 特殊数据类型

  • nullptr:C++11引入的空指针常量,用于替代NULL。例如:

    cpp

    复制

    int* ptr = nullptr;
  • std::nullptr_tnullptr的类型,用于表示空指针类型。

这些是C++中常见的数据类型。每种数据类型都有其特定的用途和特点,合理使用它们可以帮助你更好地编写高效、可读性强的代码。


以下是我整理的表格:

表格

复制

类别数据类型描述典型用途大小(字节)
基本数据类型int有符号整数类型,用于表示整数。一般整数运算通常为4字节(32位)
short有符号短整数类型,用于表示较小的整数。存储较小的整数,节省内存通常为2字节
long有符号长整数类型,用于表示较大的整数。存储较大的整数通常为4字节或8字节(平台相关)
long long有符号扩展长整数类型,用于表示非常大的整数。存储非常大的整数通常为8字节
unsigned int无符号整数类型,用于表示非负整数。存储非负整数,范围比有符号整数大通常为4字节
float单精度浮点数类型,用于表示小数。一般浮点运算通常为4字节
double双精度浮点数类型,用于表示更精确的小数。需要更高精度的浮点运算通常为8字节
long double扩展精度浮点数类型,用于表示更高精度的小数。需要极高精度的浮点运算通常为12字节或16字节(平台相关)
char字符类型,用于表示单个字符。存储ASCII字符通常为1字节
wchar_t宽字符类型,用于表示宽字符(如Unicode)。存储宽字符通常为2字节或4字节(平台相关)
char16_t16位字符类型,用于表示UTF-16编码的字符。存储UTF-16字符2字节
char32_t32位字符类型,用于表示UTF-32编码的字符。存储UTF-32字符4字节
bool布尔类型,用于表示逻辑值。存储truefalse通常为1字节
void空类型,表示无类型。函数返回值或指针类型,表示“无”无大小
复合数据类型数组一组相同类型的元素集合。存储多个相同类型的数据,通过索引访问根据数组大小和元素类型大小计算
结构体(struct用户定义的数据类型,包含多个不同类型的成员变量。存储相关数据集合根据成员变量大小计算
联合体(union特殊数据类型,可以存储多个不同类型的成员变量,但同一时间只能存储其中一个。存储多个变量,节省内存,但只能使用其中一个根据最大成员变量大小计算
枚举(enum用户定义的类型,用于定义一组命名的整数值。定义一组相关的常量通常为4字节(与int相同)
类(class用户定义的数据类型,包含成员变量和成员函数。面向对象编程,封装数据和行为根据成员变量大小计算
指针和引用指针(pointer用于存储另一个变量的内存地址。动态内存管理、函数参数传递等通常为4字节或8字节(平台相关)
引用(reference为变量提供别名。函数参数传递、避免拷贝与引用的变量占用相同大小的内存
用户自定义typedef为现有类型定义一个新的名称。简化类型名称无大小
using为现有类型定义一个新的名称(C++11)。简化类型名称无大小
其他类型auto自动推导变量的类型(C++11)。自动推导变量类型根据推导的类型大小计算
decltype获取表达式的类型(C++11)。获取表达式的类型根据表达式的类型大小计算
nullptr空指针常量(C++11)。表示空指针通常为4字节或8字节(平台相关)
std::nullptr_tnullptr的类型。表示空指针类型通常为4字节或8字节(平台相关)

说明

http://www.lryc.cn/news/572421.html

相关文章:

  • Jenkins通过Pipeline流水线方式编译Java项目
  • Docker+Jenkins+git实现Golang项目自动部署
  • springboot 打的可执行jar包单独更新某个jar包
  • JMeter 高阶玩法:分布式压测的技术核心技术要点
  • 【K8S】详解NodePort 和 ClusterIP
  • 大数据复习HDFS
  • 11.0592MHz晶振:电脑主板的“心脏”
  • 通过Docker挂载nginx并修改页面
  • ros中相机话题在web页面上的显示,尝试js解析sensor_msgs/Image数据
  • 嵌入式开发之freeRTOS移植
  • Kafka性能调优全攻略:从JVM参数到系统优化
  • Java的SpringAI+Deepseek大模型实战
  • 基于keepalived、vip实现高可用nginx (centos)
  • mongodb单节点改副本集模式
  • Python 开发环境全栈隔离架构:从 Anaconda 到 PyCharm 的四级防护体系
  • NetworkManager介绍与用法
  • 【单片机】51单片机练习代码
  • GRBL_UNO R3编译下载
  • Spring Boot 虚拟线程 vs WebFlux:谁更胜一筹?
  • Spring-创建第一个SpringBoot项目
  • apisix-使用hmac-auth插件进行接口签名身份验证\apisix consumer
  • SpringBoot项目启动时自动加载数据到Redis的完整实现方案,用于存储字典,定时任务,登录用户等
  • Spring @Autowired 依赖注入全解析
  • 语音情感识别:CNN-LSTM 和注意力增强 CNN-LSTM 模型的比较分析
  • Hive优化详细讲解
  • Redis 的优势有哪些,它是CP 还是 AP?CAP 理论又是什么?
  • C#的泛型和匿名类型
  • Ubuntu最新版本(Ubuntu22.04LTS)安装nfs服务器
  • Java八股文——计算机网络「传输层篇」
  • CppCon 2017 学习:Everything You Ever Wanted to Know about DLLs