其中是在C++、C和java中定义的默认基元
Where are the Default primitives defined in C++, c and java?
在java中,默认情况下它包括java.lang.*[这有基元吗]它包括Boolean、Integer,。。。包装器,使编译器可以理解我们的定义时,我们说整数i。
原始数据类型如何?
它是怎么知道的?
它在哪里定义?
编译器如何知道要分配多少内存?
int x;
double d;
它怎么知道int是4[2字节],double是8字节?
sizeof相应地给出大小。它和编译器可用的元数据一样吗?
在C和C++中,这些基元就是:基元。它们是在编译器本身中定义的(好吧,在"可移植"编译器中,编译器有针对不同体系结构的编译选项,人们怀疑有多个文件定义了这些类型)。C标准(同样适用于C++)为这些类型定义了一些最小大小,但实际大小由编译器决定。
很可能,这些类型并没有那么特别,只是初始化期间的一些代码设置了这些类型,并定义了这些类型的大小、对齐要求和其他基本标准。当然,还有如何生成代码来访问和执行这些类型所需的内置运算符。
是的,sizeof()
是通过在编译期间使用关于类型的数据来解析的。对于复合类型(struct
、class
、union
和数组),编译器还将考虑大小的对齐。
除了@Mats-Petersson的答案:
How does the compiler know how much memory to be alloted?
要分配的内存取决于平台。每个基本类型的大小都有一个保证的最小范围。内存量至少是这个大小。
例如,无符号字符的范围为0到255,即8位。编译器必须至少分配8位;但是它可以分配12、16或32。
一般来说,unsigned int
的大小是平台的本地字大小,只要处理器的字大小可以支持标准指定的最小范围
不能保证int
是4个字节或者double
是8个字节。一些浮点处理器支持80多位。
Where's it defined?
范围规范在C++语言标准中说明,编译器的定义存储在系统文件<limits>
或<climits>
中。
- C++(和 ROS) - 包含与前向声明引用,设置默认值和类型定义
- 没有默认构造函数作为模板参数的自定义比较器
- 在 C++ 中声明 const 对象需要用户定义的默认构造函数.如果我有一个可变成员变量,为什么不呢?
- 如何定义 Vector2f 的默认参数?[SFML]
- 用户定义的结构是否有默认C++比较器?
- 为什么为派生类定义复制构造函数需要定义基类的默认构造函数?
- 构造函数中定义的类函数的默认参数
- 注意:"Entity_c::Entity_c(const Entity_c&)"被隐式删除,因为默认定义格式不正确:
- 具有外部定义的默认特殊成员函数
- boost::p rogram_options 自定义验证和默认值
- 当为模板参数提供默认参数时,VS 2017无法正确找到以前定义的类型
- C :在现实世界中添加和重新定义默认参数
- 重新定义默认参数:参数 2
- 为什么 boost::p rogram_options 在定义默认值时会抛出有关必需参数的错误
- 如何有条件地定义默认构造函数
- 是否可以在没有预处理器宏的情况下为"virtual" get-setter 定义默认实现
- 在c++ Builder类中定义默认函数参数和参数过少错误
- 使用typedef为std::unique_ptr指定自定义默认删除器
- 如何在c++中定义默认类型转换操作符
- 模板形参重新定义默认实参