C++年如何长期实施
How is long long implemented in C++?
据我所知,C++中,所有数据类型都是作为类实现的。(不知道它是否正确,但我将其视为诸如 int a(5);
之类的语句的理由,它调用了 int 的参数化构造函数。
如果是这样,如何实施多头和空头?我刚刚发现long long
和short short
是有效的类型,但short long
和long short
不是(检查后者只是因为它听起来很有趣!
同样,如何实现已签名和未签名?
附言。通过实现,我的意思是"是使用 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++尽可能多地尝试让类的行为像原始类型(值语义(。
能够以这种方式初始化整数的特定原因实际上与类非常相关,只是方式不同。在类构造函数定义中,有一些初始值设定项列表,用于定义在执行构造函数块之前如何初始化每个成员。列表中每个初始值设定项元素的语法基本上是(我必须查找确切的定义(: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
(。
内置数据类型不作为类实现。它们只是在语法上有一些相似之处。
short
、long
、int
和所有其他内置类型名称都是编译器特别处理的关键字。所以,简而言之,它们被实现为魔法。他们不是阶级,他们只是他们自己。
所以不,这些类型不能像std::string
或其他标准库组件那样以其他语言功能实现。内置类型是核心语言的基本部分。
并非所有数据类型都是C++中的类。原始 C 数据类型不是(它们称为标量(。它们根本没有被"实现",而是形成了直接翻译成机器代码的语言的核心功能。语法int i(5);
等效于 C 的int i = 5;
,并在声明时初始化变量。
你正在一些误解下工作:
-
并非所有数据类型都作为类实现C++。 实际上,只有类类型被实现为类。 除了基本类型之外,枚举、指针和数组不作为类实现。
-
short short
不是有效的类型。 中的有符号整数类型C++03 是signed char
、short
、int
和long
。 时期。 C++11添加long long
,并允许实现添加其他内容。 -
我不确定你在这里所说的"实施"是什么意思。 在几乎所有现代机器上,硬件直接支持所有整数类型(有符号或无符号(;C++编译器仅生成相应的硬件指令。 (在较旧的机器上,
long
,有时甚至是int
或short
,通常需要函数调用才能进行基本操作,而在一些罕见和奇特的机器上,无符号算术需要额外的指令。 -
如何编写定义是一个语法问题,而不是实现问题。 如果类型支持 copy,则
T v(i);
和T v = i;
都是合法的;对于除类类型之外的所有类型,它们都是完全相同的。 (使用现代编译器;我过去使用过一些在这方面有错误的编译器。 但那是相当遥远的过去。
- 函数何时会在c++中包含stack_Unwind_Resume调用
- Python中的for循环与C++有何不同
- 在C++中释放内存期间,迭代器与指针有何不同
- 标准对此指向成员函数类型模板参数有何说明?是我的代码有误,还是 MSVS 16.6 有问题?
- 类中的 C++ int 被设置为值,似乎不知从何而来
- -fvisibility-inline-hidden 与 gcc 中的 -fvisibility=hidden 有何不同
- 收益率和回报有何不同?
- 覆盖私有功能,它与受保护功能有何不同?
- 擦除删除成语的性能增益从何而来
- 无论代码长度如何,以下代码的内存要求有何不同?
- "virtual"对C++析构函数有何影响?
- 如果我对"while"块发表评论,为什么程序会死机?其中的"yield"线有何影响?
- 系统时间从何而来?
- stl::unordered_map 和 stl::vector 的销毁有何不同
- C++ 友元函数在内存位置上有何不同?
- 为什么我可以在不链接任何额外库的情况下包含 sys/*.h
- 从未签名的长期错误中获得最多的32位重要位
- 未签名的长期添加和多个操作数
- C 是否具有接口类概念,如果它在那里,那么它与Java接口类别有何不同
- Inet_addr()以相反的顺序返回IP的长期