在C++中,据我所知,所有数据类型都是作为类实现的.(不知道它是否正确,但我将其视为语句的理由,例如int a(5);调用int的参数化构造函数.)
如果是这样,如何实现多空?我刚刚发现long long并且short short是有效的类型但是short long并long short没有(检查后者只是因为它听起来很有趣!)
同样,签名和未签名如何实施?
PS.通过实现,我的意思是"使用C/C++函数编写,还是在编译器本身的较低级别编写".
因此,基本类型的变量声明和用户定义的对象或变量的等效部分是(向下读)
auto|register|static|extern <=> auto|register|static|extern
const <=> const
(signed|unsigned)(long|short)datatype <=> class name etc
variable name <=> object/variable name
Run Code Online (Sandbox Code Playgroud)
?这种说法是否正确?
在特定的问题上,long long由编译器以编译器+平台特定的方式实现(通常比编译器依赖的平台更多).
至于最初的误解,不,并非所有类型都是C++中的类.这些语言试图尽可能为所有类型提供统一的语法,尝试尽可能地使所有类型的行为相似,并以类似的方式使用.事实上,它实际上是相反的方式:C++尽可能地尝试使类的行为类似于原始类型(值语义).
能够以这种方式初始化整数的特殊原因实际上与类非常相关,只是以不同的方式.在类构造函数定义中,有初始化列表,用于定义在执行构造函数块之前如何初始化每个成员.列表中每个初始化元素的语法基本上是(我必须查找确切的定义):, member_name( initializer )例如,你会得到:
class my_int_vector {
int * p;
int size;
public:
my_int_vector() : p(0), size(0) {}
//...
}
Run Code Online (Sandbox Code Playgroud)
指针和整数都是基本类型,但它们可以用类似于类的方式初始化.如果这种类型的初始化是不允许的基本类型,只有type name = value;语法是允许的,初始化列表语法不得不延长了,你就无法在稍后的时间(比如,改变无缝地改变那些类型int来a atomic_int).
并非所有数据类型都是C++中的类.原始C数据类型不是(它们被称为标量).它们根本没有"实现",而是形成了直接转换为机器代码的语言的核心功能.语法int i(5);等同于C,int i = 5;并在声明时初始化变量.
内置数据类型不是作为类实现的.他们只是有一些句法上的相似之处.
short,long,int和所有其他的内置类型名称为关键字,其中获得由编译器特殊对待.因此,简而言之,它们被实现为魔术.他们不是上课,他们只是自己.
所以不,这些类型不能用其他语言特性,方式std::string或其他标准库组件来实现.内置类型是核心语言的基本部分.