在文字字符串和文字值等上下文中使用“文字”这个词是什么意思?
文字值和值之间有什么区别?
答案 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 与术语值,实例,常量,成员<的同义词一个类型的em>和元素,但带有一些额外的含义,告诉我们有一个写下来的简写。
我喜欢将文字视为埃及象形文字,而不是将字母串联起来以表达概念。