Rustでは、文字列リテラルを所有できますか?

まろやかな黄色

The Rustの本によると

Rustの各値には、その所有者と呼ばれる変数があります。一度に1人の所有者しか存在できません。所有者がスコープ外になると、値は削除されます。

rust-lang.orgによると

静的アイテムは、プログラムの最後にドロップを呼び出しません。

このSOの投稿を読んだ、以下のコードfooを考えるとy、これ&y「文字列リテラルは文字列スライスである」ためと同等の変数がそのと呼ばれる値であることわかりownerます。あれは正しいですか?または、静的アイテムには所有者がいませんか?

let x = String::from("foo");  // heap allocated, mutable, owned
let y = "foo" // statically allocated to rust executable, immutable

所有されているものとは異なりString、文字列リテラルは移動され.rodataないので、おそらく実行可能ファイルに格納されているためだと思います

fn main() {
  let s1 = "foo"; // as opposed to String::from("foo")
  let s2 = s1; // not moved
  let s3 = s2; // no error, unlike String::from("foo")
}

更新:The Rustの本によると

これらのアンパサンドは参照であり、所有権を取得せずに値を参照できます...所有権を持たない別のデータ型はスライスです。

文字列リテラルは文字列スライス(&str)であるため(上​​記の引用を参照)、論理的には所有権がありません。理論的根拠は、コンパイラーが既知のサイズのデータ​​構造を必要とするということのようです。参照:

let s1: str = "foo"; // [rustc E0277] the size for values of type `str` cannot be known at compilation time [E]
薄い

文字列スライス参照(&str)は、それが指す文字列スライスを所有せず、それを借用します。オブジェクトへの不変の参照をいくつか持つことができます。そのため、2番目のコードサンプルは正しく、ボローチェッカーはそれを喜んで受け入れます。

'staticライフタイムを持つ型には所有者がいない、またはmain関数外の何かが所有していると言えると思います所有者は、所有するオブジェクトの存続期間が終了したときにのみ重要になります(所有している場合は、リソースを解放する必要があります)。参考までに、寿命だけが重要です。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

mypyは文字列リテラルを追跡できますか?

分類Dev

文字列リテラルと文字リテラルを連結できますか?

分類Dev

MySQLはリテラル文字列を式に変換できますか?

分類Dev

Cの文字列リテラルを変更できますか?

分類Dev

借りた文字列リテラルが一生を偽って所有者よりも長生きできるのはなぜですか?

分類Dev

Rustで文字列リテラル&strではなく&strを使用するのはなぜですか?

分類Dev

文字列リテラルが必要な場合はいつでもstd :: string :: c_str()を使用できますか?

分類Dev

Swift文字列補間内で文字列/文字リテラルを使用できますか?

分類Dev

文字列リテラルをconstchar *を受け取る関数に渡すことはできますか?

分類Dev

複数の文字列リテラルを使用して文字列を作成できるのはなぜですか?

分類Dev

Java文字列リテラルが実装されているかを理解することはできません

分類Dev

どのように私は、MySQLで文字列リテラルを使用して文字列内の括弧を含めることができますか?

分類Dev

C#文字列値をエスケープされた文字列リテラルに変換できますか?

分類Dev

文字列リテラルは連結で最初または2番目ですか?

分類Dev

Rustで文字列列挙型を作成できますか?

分類Dev

この文字列をリテラルに変換できないのはなぜですか?

分類Dev

文字列リテラルを__FUNCTION__に連結できないのはなぜですか?

分類Dev

Cの文字列ポインタに文字列リテラルを直接割り当てることはできますか?

分類Dev

「usestrict」がまだ文字列リテラルであるのはなぜですか?

分類Dev

「条件付き文字列リテラル」とはどういう意味ですか?

分類Dev

Pythonの「If」ステートメントの一部を可変化された文字列リテラルに置き換えることはできますか?

分類Dev

F#リテラル/定数は文字列で構成できますが、intでは構成できませんか?

分類Dev

文字列リテラルが文字列ではないのはなぜですか?

分類Dev

Rustのリテラルからフォーマットされた文字列を作成するにはどうすればよいですか?

分類Dev

空の文字列リテラルVSを返します。nullptrを返す-それらは同じですか?

分類Dev

C ++では8バイト長の複数文字リテラルを使用できますか?

分類Dev

C ++ポインタは文字列リテラルの静的メンバー配列を指すことができますか?

分類Dev

Xcode文字列リテラルで下付き文字/上付き文字を入力する方法は?

分類Dev

文字列リテラルで文字列補間を使用するにはどうすればよいですか?

Related 関連記事

  1. 1

    mypyは文字列リテラルを追跡できますか?

  2. 2

    文字列リテラルと文字リテラルを連結できますか?

  3. 3

    MySQLはリテラル文字列を式に変換できますか?

  4. 4

    Cの文字列リテラルを変更できますか?

  5. 5

    借りた文字列リテラルが一生を偽って所有者よりも長生きできるのはなぜですか?

  6. 6

    Rustで文字列リテラル&strではなく&strを使用するのはなぜですか?

  7. 7

    文字列リテラルが必要な場合はいつでもstd :: string :: c_str()を使用できますか?

  8. 8

    Swift文字列補間内で文字列/文字リテラルを使用できますか?

  9. 9

    文字列リテラルをconstchar *を受け取る関数に渡すことはできますか?

  10. 10

    複数の文字列リテラルを使用して文字列を作成できるのはなぜですか?

  11. 11

    Java文字列リテラルが実装されているかを理解することはできません

  12. 12

    どのように私は、MySQLで文字列リテラルを使用して文字列内の括弧を含めることができますか?

  13. 13

    C#文字列値をエスケープされた文字列リテラルに変換できますか?

  14. 14

    文字列リテラルは連結で最初または2番目ですか?

  15. 15

    Rustで文字列列挙型を作成できますか?

  16. 16

    この文字列をリテラルに変換できないのはなぜですか?

  17. 17

    文字列リテラルを__FUNCTION__に連結できないのはなぜですか?

  18. 18

    Cの文字列ポインタに文字列リテラルを直接割り当てることはできますか?

  19. 19

    「usestrict」がまだ文字列リテラルであるのはなぜですか?

  20. 20

    「条件付き文字列リテラル」とはどういう意味ですか?

  21. 21

    Pythonの「If」ステートメントの一部を可変化された文字列リテラルに置き換えることはできますか?

  22. 22

    F#リテラル/定数は文字列で構成できますが、intでは構成できませんか?

  23. 23

    文字列リテラルが文字列ではないのはなぜですか?

  24. 24

    Rustのリテラルからフォーマットされた文字列を作成するにはどうすればよいですか?

  25. 25

    空の文字列リテラルVSを返します。nullptrを返す-それらは同じですか?

  26. 26

    C ++では8バイト長の複数文字リテラルを使用できますか?

  27. 27

    C ++ポインタは文字列リテラルの静的メンバー配列を指すことができますか?

  28. 28

    Xcode文字列リテラルで下付き文字/上付き文字を入力する方法は?

  29. 29

    文字列リテラルで文字列補間を使用するにはどうすればよいですか?

ホットタグ

アーカイブ