在诸如文字字符串和文字值之类的上下文中使用时,“文字”一词是什么意思?
文字值和值有什么区别?
文字是“在源代码中表示值的任何符号”(维基百科)
(与identifiers对比,它引用内存中的一个值。)
例子:
"hey"
(一个字符串)false
(一个布尔值)3.14
(实数)[1,2,3]
(数字列表)(x) => x*x
(一个函数)/^1?$|^(11+?)\1+$/
(一个正则表达式)一些不是文字的东西:
std::cout
(标识符)foo = 0;
(一份声明)1+2
(一种表达)文字是直接硬编码到源代码中的值。
例如:
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;
它们与变量或资源的不同之处在于编译器可以将它们视为常量或对使用它们的代码执行某些优化,因为可以肯定它们不会改变。
文字是对显式值的赋值,例如
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'
编辑:正如所指出的,赋值本身与文字的定义无关,我在示例中使用了赋值,但文字也可以传递给方法等。
文字是指在源代码中包含值(而不是引用变量或常量)。例如:
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。如果数字的含义比它的实际值更重要(通常是),最好命名它。
文字值是一个值,但一个值也可以存储在一个变量中。在声明中
string str = "string literal";
有一个字符串变量 (str) 和一个字符串文字。语句执行后,它们都具有相同的值。
请注意,在许多语言中,变量和文字值甚至不一定必须是相同的类型。例如:
int a = 1.0;
上面的文字值是一个浮点类型。编译器将强制该值适合 int 变量。
再举一个例子,在上面的第一行 C++ 代码中,字符串文字的类型实际上根本不是库类型string
。为了保持与 C 的向后兼容性,C++ 中的字符串文字是 char 数组。
快速示例:
int my_int_var = 723;
723 - 这组字符指的是一个文字整数值。
my_int_var - 这组字符是指一个变量整数值。
文字是当您将其放入代码中时。所以字符串文字是
string s = "SomeText";
这与构建字符串或将其作为参数相反。
通常,当有人使用文字一词时,他们的意思是可以从代码(文本)中破译该值,如其他帖子中的许多示例所示。
另一种常见用法是在汇编中转换为立即值的值。这些是直接插入机器指令而不需要寄存器加载的值。
文字是“数据的源代码表示”。
我听说过随便使用字符串文字来指代C# 规范实际上所指的逐字字符串文字。常规字符串文字允许转义某些字符(以 a 为前缀),例如 \t 用于制表符。逐字字符串文字以@ 开头并逐字处理,\ 没有特殊含义。
//regular
string regular = "\thello world";
//verbatim
string verbatim = @"C:\";
//the regular equivalent of this would be "C:\\"
文字是某些类型的值的简写符号,语言认为如此重要或基本,以至于它专门为它们提供了专门的语法糖。
其值通常由文字表示的类型示例:
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
确实使用一系列符号唯一地表示,但是,该值不是使用专用的速记文字表示的,而是使用通用(详细)概念机制来表示任何类类型的值。
字面量这个词是value、instance、constant、member和element of a type的同义词,但带有一些额外的含义,告诉我们有一种速记方式可以将其写下来。
我喜欢将文字视为埃及象形文字,而不是将字母表中的字符串在一起以表达概念。