“文字”一词​​是什么意思?


Answers:


116

文字是“用于在源代码中表示值的任何符号”(Wikipedia

(将其与标识(将其指向内存中的值)进行对比。)

例子:

  • "hey" (一个字符串)
  • false (一个布尔值)
  • 3.14 (实数)
  • [1,2,3] (数字列表)
  • (x) => x*x (功能)
  • /^1?$|^(11+?)\1+$/ (一个正则表达式)

一些不是文字的东西:

  • std::cout (标识符)
  • foo = 0; (一份声明)
  • 1+2 (一种表达)

可悲的是,我不知道它如何确定素数。我只是从某个地方复制了它,因为它看起来很酷

1
我什至不知道那是什么:我只是认为完全显示正则表达式文字是个好主意。
Joel Coehoorn

4
如今,Wikipedia定义中的“在源代码中表示值的任何符号”对于那些已经了解而不是出于教学目的的专家而言,它们的引用像是参考书—上面的翻译成“像我五岁的孩子一样解释”?
BKSpurgeon

2
@BKSpurgeon基本上是表示程序中值的代码,而不是要执行的程序具有特殊含义。例如:在程序中,15 字面意思是15,而+它的特殊含义是“将两件事加在一起”。您不会将它+视为代表加号,因为它不是文字。
avid_useR

81

文字是直接硬编码到源中的值。

例如:

string x = "This is a literal";
int y = 2; // so is 2, but not y
int z = y + 4; // y and z are not literals, but 4 is
int a = 1 + 2; // 1 + 2 is not a literal (it is an expression), but 1 and 2 considered separately are literals

一些文字可能具有特殊的语法,因此您知道文字是什么类型:

//The 'M' in 10000000M means this is a decimal value, rather than int or double.
var accountBalance = 10000000M; 

将它们与变量或资源区分开来的原因在于,编译器可以将它们视为常量,或者可以在使用它们的代码处执行某些优化,因为可以确定它们不会更改。


11
我喜欢您刚刚解释的方式,而不是试图显示您知道多少,从而使新手感到困惑。我们需要更多像您这样的人。
Smee先生

2
简单而令人信服。谢谢
约翰尼,

16

文字是对显式值的赋值,例如

int i = 4;  // i is assigned the literal value of '4'
int j = i   // j is assigned the value of i.  Since i is a variable,  
            //it can change and is not a 'literal'

编辑:如前所述,赋值本身与文字的定义无关,我在示例中使用的是赋值,但文字也可以传递给方法等。


是的:字面量与分配无关;)

是的,我应该澄清一个事实,即我正在使用赋值来演示文字是什么。
Ed S.

12

文字是在源代码中包含值时(与引用变量或常量相对)。例如:

int result = a + 5; // a is a variable with a value, 5 is a literal

string name = "Jeff Atwood"; // name is a variable initialized
                             // with the string literal, "Jeff Atwood"

int[] array = new int[] {1, 2, 3}; // C# has array literals (this is actually three
                                   // int literals within an array literal)

如果文字代表某种数量,例如物理常数,则最好给它起一个名字,而不是在需要的地方都写相同的文字。这样,在阅读源代码时,您就会知道数字的含义,它通常比其值更重要(它可能随时会变化)。

const int maxUsers = 100;
const double gravitationalAcceleration = 9.8;

通常,我使用的唯一数字文字(除了用于初始化上述常量之外)为0或1,如果我跳过循环中的所有其他项,则有时为2。如果数字的含义比实际(通常是实际)更重要,则最好将其命名。


6

文字值是一个值,但是值也可以存储在变量中。在声明中

string str = "string literal";

有一个字符串变量(str)和一个字符串文字。语句执行后,它们都具有相同的值。

请注意,在许多语言中,变量和文字值甚至不一定必须是同一类型。例如:

int a = 1.0;

上面的文字值是浮点类型。该值将由编译器强制转换为适合int变量的值。

再举一个例子,在C ++代码的第一行中,字符串文字的类型实际上根本不是库类型string。为了保持与C的向后兼容性,C ++中的字符串文字是char数组。


5

快速示例:

int my_int_var = 723;

723-此字符集引用文字整数值。

my_int_var-这组字符引用可变的整数值。


3

文字是将其放入代码中的时间。所以字符串文字是

string s = "SomeText";

这与构建字符串或将其作为参数相反。


2

通常,当有人使用字面量一词时,它们的含义是可以从代码(文本)中识别出该值,如其他文章中的许多示例所示。

另一个常见用法是将值转换为汇编中的立即值。这些是直接插入到机器指令中的值,而不需要寄存器加载。



1

我听说过字符串文字常被用来指代C#规范实际上称为逐字字符串文字。常规字符串文字允许转义某些字符(以前缀),例如\ t用于制表符。逐字字符串文字以@开头,并且逐字处理,\没有特殊含义。

//regular
string regular = "\thello world";
//verbatim
string verbatim = @"C:\";
//the regular equivalent of this would be "C:\\"

0

文字是某些类型的值的简写表示法,这些类型被认为是非常重要或基本的,以至于有专门针对它们的语法糖。

类型的示例,其值通常由文字表示:

Boolean = { true, false }
Integer = { ..., -2, -1, 0, 1, 2, ... }
Character = { 'a', 'b', ... }
String = { "hello", "world", ... }

某些语言甚至具有函数类型的文字

Integer -> Integer = { (x: Integer) => x + 2), (x: Integer) => x/2, ...}

通常不使用文字表示的值的示例是类类型的值:

Car(brand: String, seats: Integer) = { Car("BMW", 5), Car("Ferrari", 2), ...}

在这里,Car("BMW", 5)类型中的值Car确实使用一系列符号唯一地表示,但是,该值不是使用专用的速记文字来表示的,而是使用通用的(冗长的)概念机制来表示任何类类型的值。

术语字面是术语的代名词例如固定成员,和元素的类型,却承载了一下,告诉我们只有写下来的简写额外的意义。

我喜欢将文字视为埃及的象形文字,而不是将字母中的字符串在一起以表达概念。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.