您的位置:首页 > 编程语言 > C语言/C++

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

2012-02-09 17:06 666 查看
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表达式的更多用法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐