The New C++ -- 基本数据类型和字面值常量 (3. sizeof表达式和typeid表达式)

本文探讨了C++中的sizeof运算符用于获取不同类型在内存中的占用空间,以及如何利用<limits>库获取整型的最小值与最大值。同时介绍了通过 typeid 表达式获取类型名称的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C++提供了一些机制让我们知道一个编译器中的整型(或者其他任何类型)占多少内存空间,那就是sizeof表达式。sizeof(类型)返回该类型在内存中占用的空间(单位为字节)。例如下面的程序,


#include<iostream>
int main()
{
   std::cout << sizeof(short int) << " " << sizeof(int) << " "
       << sizeof(long int) << " " sizeof(long long int) << std::endl;
   return 0;
}

这个程序在Visual C++和GCC中的输出都为 2 4 4 8。


小知识:在现在绝大多数32位系统中,short int一般是16位,int是32位,long int是32位,long long int是64位。在现在的64位系统中,short int一般是16位,int是32位,long int是32位或者64位,long long int是64位。对大多数现存的8位和16位的嵌入式处理器的编译器来讲,short int和int一般都是16位,long int是32位,long long int是64位。你可以查找你所用的系统以及编译器的使用手册来确定不同整型的存储范围。




练习:

要得到不同编译器所定义的整型的最小值和最大值除了sizeof外还有一种方法。请输入下面这个程序,查看运行结果,并尝试解释程序是如何运行的。

通过C++的库文件<limits>,示例如下。


#include <iostream>
#include <limits>
int main()
{
   std::cout << "short int: "
       << std::numeric_limits<short int>::min()    << ", "
       << std::numeric_limits<short int>::max() << std::endl;
   std::cout << "unsigned short int: "
       << std::numeric_limits<unsigned short int>::min() << ", "
       << std::numeric_limits<unsigned short int>::max() << std::endl;
   std::cout << "int: "
       << std::numeric_limits<int>::min()    << ", "
       << std::numeric_limits<int>::max() << std::endl;
   std::cout << "unsigned int: "
       << std::numeric_limits<unsigned int>::min() << ", "
       << std::numeric_limits<unsigned int>::max() << std::endl;
   std::cout << "long int: "
       << std::numeric_limits<long int>::min()    << ", "
       << std::numeric_limits<long int>::max() << std::endl;
   std::cout << "unsigned long int: "
       << std::numeric_limits<unsigned long int>::min() << ", "
       << std::numeric_limits<unsigned long int>::max() << std::endl;
   std::cout << "long long int: "
       << std::numeric_limits<long long int>::min()    << ", "
       << std::numeric_limits<long long int>::max() << std::endl;
   std::cout << "unsigned long long int: "
       << std::numeric_limits<unsigned long long int>::min() << ", "
       << std::numeric_limits<unsigned long long int>::max() << std::endl;
   return 0;
}


除了sizeof之外,通过typeid表达式可以知道某个类型的名字。例如,


std::cout << typeid(unsigned long long int).name() << std::endl;


这个例子看起来也许没什么用处,因为我们已经知道类型的名字了。但有时当我们不知道类型名的时候就有用处了。我们会在后面介绍typeid表达式的更多用法。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值