“文字”这个词是什么意思?

时间:2009-01-27 20:38:42

标签: c# language-agnostic terminology glossary

在文字字符串和文字值等上下文中使用“文字”这个词是什么意思?

文字值和值之间有什么区别?

11 个答案:

答案 0 :(得分:104)

字面值是“代表源代码中的值的任何表示法”(wikipedia

(与标识符对比,引用到内存中的值。)

示例:

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

一些不是文字的东西:

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

答案 1 :(得分:73)

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

例如:

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; 

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

答案 2 :(得分:15)

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

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'

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

答案 3 :(得分:9)

文字是指在源代码中包含值(而不是引用变量或常量)。例如:

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。如果数字的含义比实际的(通常是)更重要,那么最好给它命名。

答案 4 :(得分:6)

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

string str = "string literal";

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

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

int a = 1.0;

上面的文字值是浮点类型。该值将由编译器强制进入int变量。

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

答案 5 :(得分:4)

快速举例:

int my_int_var = 723;

723 - 这组字符指的是文字整数值。

my_int_var - 这组字符指的是变量整数值。

答案 6 :(得分:3)

一个文字是你把它放在代码中。所以字符串文字是

string s = "SomeText";

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

答案 7 :(得分:2)

通常当有人使用单词literal时,他们的意思是该值可以从代码(文本)中解密,如其他帖子中的许多示例所示。

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

答案 8 :(得分:1)

我听说过随意使用的字符串文字来引用C# specification实际上称为逐字字符串文字的内容。常规字符串文字允许转义某些字符(以a为前缀),例如选项卡的\ t。一个逐字字符串文字由@作为前缀并逐字处理,\没有特殊含义。

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

答案 9 :(得分:1)

文字是“数据的源代码表示”。

答案 10 :(得分:0)

文字是某些类型的值的简写符号,语言认为它们非常重要或基本,因此它只为它们提供专用的语法糖。

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

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

有些语言即使对于函数类型也有literals

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确实使用符号序列唯一地表示,但是,该值不使用专用的简写字面值表示,而是使用一般(详细)名词表示任何类类型值的机制。

术语 literal 与术语实例常量成员<的同义词元素,但带有一些额外的含义,告诉我们有一个写下来的简写。

我喜欢将文字视为埃及象形文字,而不是将字母串联起来以表达概念。