![]() |
1
0
我想有一件事你没有提到是空间和分配。基元是值类型,并在堆栈上分配(只要它们不与对象关联),除了您提到的字符串类型(字符串类在堆上分配其空间)。 尽管对象本身包含基元,但实际对象的分配位置(位于堆中)存储在那里。 另外,你的陈述写得很好。您是否有我遗漏的特定问题:)? |
![]() |
2
14
我只是想在这里写个便条。 C语言规范清楚地定义了“literal”——literal是 值的源代码表示法 . 文字是诸如“真”、“10”、“5.7”、“C”、“Hello”和“空”之类的东西——它们是 文本 代表一个 特定值 . C语言规范使用了两次“原始”这个词;它从来没有被定义过,并且对它可能的含义完全模糊。 C语言规范不需要使用或定义单词“primitive”,因此不应该使用这个模糊的术语。我已经和MADS谈过了,我们已经同意对规范的未来版本进行修改,以完全消除这种用法。 当然,其他类型系统规范——反射库、cli、ves等等——是如何定义单词“primitive”的。 谢谢你提出这个问题。 |
![]() |
3
3
我不同意一点:
文字是某种编译时常量(如
基本类型是imo“基本”类型,如string、int、double、float、short、… 因此,原始文字的类型与它们相关。 |
![]() |
4
3
是的,文本是一个用源代码表示的值,所以虽然vb支持日期/时间和XML文本,但c不支持。 根据C规范第2.4.4节:
如您所说,这与值类型无关,而引用类型-字符串实际上是引用类型。
一个还没有人提到的字面意思
它也与原始类型无关-来自
…C规范实际上并没有定义“原始”类型的概念,但请注意
字面意思是编译时间常数…在C中,每个文本都有一个可以直接烘焙到程序集中的表示;在VB中,额外的文本意味着它们不是clr理解的常量-不能
|
![]() |
5
1
Here 是一个关于cls的msdn页面,其中包括 一串 作为基元类型:
|
![]() |
6
0
别忘了这里也存在着 ASP.Net Literal class . 编辑:因此,标题中的问题的答案是否,因为没有提供相同功能的“基本”类。不过,这可以被视为一种明智的ALEC回应。 |
![]() |
7
0
我认为你的理解基本上是正确的。正如Winsharp93所说,文本本身就是有类型的值,但没有“文本类型”这样的东西。也就是说,虽然可以使用字符串文本,但字符串不是“文本类型”。正如您所猜测的,定义一个文本的是直接在源代码中写下该值,尽管您不需要指定任何类型的要求似乎过于严格(例如f具有数组文本,并且可以推断数组文本的类型)
不幸的是,我不认为对原始人的定义有一个一致的定义。当然,正如乔恩·斯基特所指出的,clr有自己的原始性定义。(
|
![]() |
8
0
只需补充一点,还有另一种类型模糊了限制:
IMHO 本原类型 可以简单地定义为在每个基础中直接“存在”的类型 平台/主机 :如果您已经使用汇编语言,您知道您有字节、字、双字…但你没有字符串或小数。 的确 净小数 是 仿真 “由.NET运行时处理,而不是由只了解 IEEE 754 浮点数(浮点数和双精度数,然后是基元类型)。 通过对文字值概念的扩展 “文字类型” 可以被视为其值可以直接用给定语言(C,VB.NET,CIL…)表示的任何类型。 有了这个定义,文字类型将是: 所有基元类型+字符串+小数 . |
![]() |
GTF · 为什么javascript字符串排序比数字更快? 7 年前 |
![]() |
ocram · 解析不同的数据类型Java 8 年前 |
![]() |
JalalJaberi · 更清楚内置、基本和原始数据类型? 11 年前 |
![]() |
emresancaktar · NSString和数学? 11 年前 |
![]() |
Sophie Sperner · 将动态基元类型(int)传递给方法 12 年前 |