“int”数据类型是否定义为类?

时间:2012-10-12 19:39:49

标签: c++

我想知道'int'被定义为一个类,意味着像某个头文件中的某个地方它们是一个名为int的类

class int
{

}

当我们声明一个变量时,会创建一个int类的实例吗? 如果'int'是一个类,它存储在哪个文件中?

4 个答案:

答案 0 :(得分:4)

没有; int 不是一种“类型”。这是一种所谓的“标量”类型。

为了更一般地确定给定对象类型T是标量,数组,联合还是类类型,您可以#include <type_traits>并使用std::is_scalar<T>::value,类似于特征{{ 1}},is_arrayis_union

(另请注意,并非所有类型都是对象类型;还有引用类型和函数类型。您可以使用std::is_objectis_class以及is_function来首先进行区分。)

答案 1 :(得分:1)

int不是一个类,它是一个本机类型。

声明int:

int x;

您确实创建了int

的实例

C ++在这方面与许多其他语言不同,例如在Java或Ruby中,“一切都是对象”。这通常意味着一切都来自一个根类,或者至少看起来是。

考虑例如Ruby,其中所有内容最终都来自Object。反过来,Object被实现为一个完全成熟的类。它有像to_s这样的方法和实现这些方法的代码。

C ++不是那样的。 C ++有非常基本的类型,比如int,它们不是从任何东西派生的。这些类型背后没有代码,它们没有任何方法。你做不到这样的事情:

int x = 42;
string s = x.to_s();

因为to_s()或任何方法都没有int方法。

你也问过,

  

如果'int'是一个类,它存储在哪个文件中?

int未存储在任何文件中。 int的含义和定义内置于编译器本身。您的计算机上没有可以打开的文件,以查看int的定义方式。当你做类似的事情时:

int x = 42;
x += 77;

...编译器不必查看任何头文件就知道如何添加77到42.它已经知道了,因为int是编译器已经知道的东西。几乎像先验知识一样,它就是“就在那里”。

编译器如何知道?因为编写编译器的人(顺便说一下,可能使用C或C ++)编写了这些知识。编译器如何编写知道写什么?他们遵循了一个名为C ++标准的文档,该文档准确地解释了符合标准的编译器应该如何表现。

答案 2 :(得分:0)

不,int是内置类型。这不是一个阶级。编译器具有如何处理int的内置知识。

答案 3 :(得分:0)

不,int是一种基本类型,如:

中所定义

3.9.1基本类型[basic.fundamental]

  

2)有五种有符号整数类型:“signed char”,“short int”,“int”,“long int”。和“long long int” ”。   在此列表中,每种类型至少提供与列表中前面的存储一样多的存储空间。普通锭具有自然尺寸   由执行环境的架构建议);提供其他有符号整数类型以满足特殊要求   需要。