【问题标题】:What does the word "literal" mean?“字面意思”这个词是什么意思?
【发布时间】:2010-10-03 20:41:55
【问题描述】:

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

字面量值和值有什么区别?

【问题讨论】:

    标签: c# language-agnostic terminology glossary


    【解决方案1】:

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

    (与 identifiers 对比,引用内存中的一个值。)

    例子:

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

    一些不是文字的东西:

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

    【讨论】:

      【解决方案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; 
      

      它们与变量或资源的不同之处在于编译器可以将它们视为常量或对使用它们的代码执行某些优化,因为它们肯定不会改变。

      【讨论】:

        【解决方案3】:

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

        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'
        

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

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

            【解决方案5】:

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

            string str = "string literal";
            

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

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

            int a = 1.0;
            

            上面的文字值是浮点类型。编译器会强制该值适合 int 变量。

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

            【讨论】:

              【解决方案6】:

              快速示例:

              int my_int_var = 723;

              723 - 这组字符指的是一个literal整数值。

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

              【讨论】:

                【解决方案7】:

                文字是当你把它放在代码中的时候。所以字符串文字是

                string s = "SomeText";
                

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

                【讨论】:

                  【解决方案8】:

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

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

                  【讨论】:

                    【解决方案9】:

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

                    【讨论】:

                      【解决方案10】:

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

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

                      【讨论】:

                        【解决方案11】:

                        文字是某些类型值的简写符号,语言认为如此重要或基本,以至于它有专门的语法糖。

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

                        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 类型中的值 Car("BMW", 5) 确实使用符号序列唯一表示,但是,该值不是使用专用的速记文字表示的,而是使用通用(详细)概念机制来表示值任何类类型。

                        literal这个词是valueinstanceconstantmember的同义词em> 和 element 的类型,但带有一些额外的含义,告诉我们有一个简写形式。

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

                        【讨论】:

                          猜你喜欢
                          • 2018-10-29
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 2017-05-25
                          • 2011-04-11
                          • 2010-11-10
                          • 1970-01-01
                          • 1970-01-01
                          相关资源
                          最近更新 更多