88

リテラル文字列やリテラル値などのコンテキストで使用される場合、「リテラル」という言葉は何を意味しますか?

リテラル値と値の違いは何ですか?

4

11 に答える 11

130

リテラルは「ソースコード内の値を表すための任意の表記法」です (ウィキペディア)

(メモリ内の値を参照する識別子と比較してください。)

例:

  • "hey"(文字列)
  • false(ブール値)
  • 3.14(実数)
  • [1,2,3](数字のリスト)
  • (x) => x*x(機能)
  • /^1?$|^(11+?)\1+$/(正規表現)

リテラルではないもの:

  • std::cout(識別子)
  • foo = 0;(声明)
  • 1+2(表現)
于 2009-01-27T20:46:04.613 に答える
87

リテラルは、ソースに直接ハードコードされた値です。

例えば:

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; 

それらを変数やリソースと区別するのは、コンパイラーがそれらを定数として扱ったり、それらが使用されているコードで特定の最適化を実行したりできることです。それらは変更されないことが確実であるためです。

于 2009-01-27T20:42:29.037 に答える
18

リテラルは、次のような明示的な値への代入です。

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'

編集:指摘したように、割り当て自体はリテラルの定義とは関係ありません。例では割り当てを使用していましたが、リテラルはメソッドなどに渡すこともできます。

于 2009-01-27T20:41:13.890 に答える
13

リテラルは、(変数または定数を参照するのではなく)ソースコードに値を含める場合です。例えば:

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になることもあります。数値の意味が実際のよりも重要である場合(通常はそうです)、名前を付けることをお勧めします。

于 2009-01-27T20:58:35.167 に答える
6

リテラル値は値ですが、値を変数に格納することもできます。声明の中で

string str = "string literal";

文字列変数(str)と文字列リテラルがあります。ステートメントが実行された後、それらは両方とも同じ値になります。

多くの言語では、変数とリテラル値は必ずしも同じ型である必要はないことに注意してください。例えば:

int a = 1.0;

上記のリテラル値は浮動小数点型です。値は、int変数に収まるようにコンパイラーによって強制されます。

別の例として、上記のC ++コードの最初の行では、文字列リテラルの型は実際にはライブラリ型stringではありません。Cとの下位互換性を維持するために、C++の文字列リテラルはchar配列です。

于 2009-01-27T20:47:47.700 に答える
5

簡単な例:

int my_int_var = 723;

723 - この文字セットは、リテラル整数値を参照します。

my_int_var - この文字セットは可変整数値を参照します。

于 2009-01-27T20:43:43.620 に答える
3

リテラルは、コードに入れるときです。したがって、文字列リテラルは

string s = "SomeText";

これは、文字列を作成したり、パラメーターとして受け取ったりすることとは対照的です。

于 2009-01-27T20:42:15.713 に答える
2

一般に、誰かがリテラルという単語を使用する場合、他の投稿の多くの例に示されているように、値がコード(テキスト)から解読可能であることを意味します。

もう1つの一般的な使用法は、アセンブリで即値に変換される値です。これらは、レジスタのロードを必要とせずに、マシン命令に直接挿入される値です。

于 2009-01-27T21:03:03.457 に答える
2

リテラルは「データのソースコード表現」です。

于 2016-12-25T11:36:54.170 に答える
1

C#仕様が実際に逐語的な文字列リテラルと呼んでいるものを参照するために、文字列リテラルが何気なく使用されているのを聞いたことがあります。通常の文字列リテラルでは、タブの\ tのように、特定の文字(プレフィックスは)をエスケープできます。逐語的な文字列リテラルの前に@が付加され、逐語的に処理されます。\には特別な意味はありません。

//regular
string regular = "\thello world";
//verbatim
string verbatim = @"C:\";
//the regular equivalent of this would be "C:\\"
于 2009-01-27T20:54:27.687 に答える