“literal”这个词是什么意思?

在文本string和文字值等上下文中,“literal”这个词是什么意思?

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

文字是“在源代码中表示值的任何符号”( 维基百科 )

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

例子:

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

一些不是文字的东西:

  • std::cout (一个标识符)
  • foo = 0; (一份声明)
  • 1+2 (expression式)

文字是一个已经直接写入源代码的值。

例如:

 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 

一些文字可以有一个特殊的语法,所以你知道什么types的文字是:

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

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

一个文字是赋值给一个明确的值,比如

 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' 

编辑:正如指出的,赋值本身没有任何关系的文字的定义,我在我的例子中使用赋值,但文字也可以传递给一个方法,等等。

在编程中,一个完全按照它的意思来解释的值。 相反,variables是在程序执行期间可以表示不同值的名称。 常数是一个在整个程序中代表相同价值的名字。 但是文字不是一个名字,而是价值本身。

文字可以是数字,字符或string。 例如,在expression式中,

x = 3

x是一个variables,3是一个文字。

一个文字是当你在源代码中包含该值(而不是引用一个variables或一个常量)。 例如:

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

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

 string str = "string literal"; 

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

请注意,在许多语言中,variables和文字值不一定必须是相同的types。 例如:

 int a = 1.0; 

上面的文字值是一个浮点types。 该值将被编译器强制转换为intvariables。

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

快速示例:

int my_int_var = 723;

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

my_int_var – 这组字符是指一个可变的整数值。

字面是当你把它放在代码中。 所以string文字是

 string s = "SomeText"; 

这与构buildstring或将其作为参数相反。

通常,当某人使用单词字面时,它们的意思是代码(文本)中的值是可以翻译的,如其他文章中的许多示例所示。

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

我曾经听说过使用string文字来引用C#规范实际引用的逐字string文字。 一个常规的string文字允许转义某些字符(前缀为a),如\ t为一个制表符。 逐字string文字由@前缀并逐字处理,\没有特殊含义。

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

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