gpt4 book ai didi

c++ - long long在C++中是如何实现的?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:06:48 24 4
gpt4 key购买 nike

据我所知,在 C++ 中,所有数据类型都是作为类实现的。 (不知道它是否正确,但我将其读作诸如调用 int 的参数构造函数的 int a(5); 之类的语句的理由。)

如果是这样,多头和空头是如何实现的?我刚刚发现 long longshort short 是有效类型,但 short longlong short 不是(检查后面的只是因为它听起来很有趣!)

同理,signed和unsigned是如何实现的?

附言。关于实现,我的意思是“是使用 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

?这个假设正确吗?

最佳答案

在特定问题上,long long 由编译器以编译器+平台特定方式实现(通常比编译器更依赖于平台)。

至于最初的误解,不,并非所有类型都是 C++ 中的类。这些语言试图尽可能为所有类型提供统一的语法,试图让所有类型的行为尽可能相似,并以相似的方式使用。事实上,它实际上恰恰相反:C++ 尽可能地尝试让类表现得像原始类型(值语义)。

能够以这种方式初始化整数的特殊原因实际上与类非常相关,只是方式不同。在类构造函数定义中,有初始化程序列表,它们定义了如何在执行构造函数 block 之前初始化每个成员。列表中每个初始化元素的语法基本上是(我必须查找确切的定义):member_name( initializer ),例如你会得到:

class my_int_vector {
int * p;
int size;
public:
my_int_vector() : p(0), size(0) {}
//...
}

指针和整数都是基本类型,但它们可以用类似于类的方式进行初始化。如果基本类型不允许这种类型的初始化,并且只允许 type name = value; 语法,则必须扩展初始化列表语法,并且您将无法无缝更改这些类型稍后会出现(例如,将 int 更改为 atomic_int)。

关于c++ - long long在C++中是如何实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6491934/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com