String literals are arrays - objects of inherently unpredictable size (i.e of user-defined and possibly large size). In general case, there s simply no other way to represent such literals except as objects in memory, i.e. as lvalues
. In C99 this also applies to compound literals, which are also lvalues
.
任何人为隐瞒字面直面字面为l Values
的企图,都将造成大量不必要的困难,因为能够用点字面直面直面直面,以及能够作为阵列来,关键取决于其是否在语言层面具有很高的价值。
同时,ar类的字面有固定的汇编时间。 与此同时,这种字面很可能直接植入特定硬件结构的机器指令中。 例如,如果你写上<条码>i = i * 5 + 2,则字面值<条码>5条码>和<条码>2条码>成为生成的机码中明确(甚至含)部分。 它们并不存在,也不需要作为数据储存的单独地点存在。 在数据记忆中,存储数值没有点5
和2
。
还值得注意的是,在许多(如果不是多数或全部)硬件结构中,浮动点字面实际上被作为“隐蔽的”<代码>l Values加以实施。 (尽管这些语言并不暴露于这些语言)。 在像X86号机组这样的平台上,浮点组的机器指挥不支持嵌入式直接操作。 这意味着,几乎每个浮点字面必须储存在(和从)数据记忆中。 E.g. 页: 1 它变成了类似的东西。
const double unnamed_double_5_5 = 5.5;
const double unnamed_double_2_1 = 2.1;
i = i * unnamed_double_5_5 + unnamed_double_2_1;
换言之,floating-point Hauss
往往会在内部成为“un official”l Values
。 然而,很有必要的是,语言说明并没有试图揭露这种执行细节。 在语文一级,<代码>arithmeticlichs具有更大的意义,成为r Values
。