タグ付けされた質問 「lifetime」

5
C ++関数の静的変数の有効期間はどのくらいですか?
変数がstatic関数のスコープ内で宣言されている場合、変数は1回だけ初期化され、関数呼び出し間でその値を保持します。その寿命は正確には何ですか?コンストラクタとデストラクタはいつ呼び出されますか? void foo() { static string plonk = "When will I die?"; }
373 c++  static  lifetime 

2
値とその値への参照を同じ構造体に格納できないのはなぜですか?
私には値があり、その値とその値内の何かへの参照を自分のタイプで保存したい: struct Thing { count: u32, } struct Combined<'a>(Thing, &'a u32); fn make_combined<'a>() -> Combined<'a> { let thing = Thing { count: 42 }; Combined(thing, &thing.count) } 時々、私は値を持っていて、その値とその値への参照を同じ構造に保存したいと思います: struct Combined<'a>(Thing, &'a Thing); fn make_combined<'a>() -> Combined<'a> { let thing = Thing::new(); Combined(thing, &thing) } 時々、値の参照すらしていなくても同じエラーが発生します: struct Combined<'a>(Parent, Child<'a>); fn make_combined<'a>() …


1
非字句の存続期間とは何ですか?
Rustには、長い間この言語での実装が承認されている非字句の存続期間に関連するRFCがあります。最近、Rustによるこの機能のサポートは大幅に改善され、完全であると見なされています。 私の質問は、非字句の寿命とは正確には何ですか?

9
Cでの文字列リテラルの「ライフタイム」
次の関数によって返されるポインタにアクセスできませんか? char *foo(int rc) { switch (rc) { case 1: return("one"); case 2: return("two"); default: return("whatever"); } } つまり、C / C ++のローカル変数の存続期間は、実際には関数内だけですよね?つまり、char* foo(int)終了した後、それが返すポインタはもはや何も意味しませんよね? ローカル変数の存続期間について少し混乱しています。良い説明は何ですか?

1
独自の初期化子での変数の使用
C ++ 20標準草案の[basic.scope.pdecl] / 1には、次の(非規範的)例が注記(プルリクエスト3580のマージ前の部分的な引用、この質問への回答を参照)に含まれていました。 unsigned char x = x; [...] xは、独自の(不定)値で初期化されます。 これは実際にC ++ 20で明確に定義された動作を持っていますか? 一般に、フォームの自己初期化は、初期化が完了する前のの値が不定であるT x = x;ため、未定義の動作をします。不確定な値を評価すると、通常、未定義の動作([basic.indent] / 2)が発生しますが、[basic.indent] /2.3には、不確定な値を持つ左辺値から変数を直接初期化できる特定の例外があります(不確定な値で初期化が発生します) )。xunsigned charunsigned char これだけでは、したがって、未定義の動作を引き起こすが、他のタイプの場合としないT符号なしの狭い文字タイプかそうでないstd::byte、例えばint x = x;。C ++ 17以前にも適用されたこれらの考慮事項は、下部にあるリンクされた質問も参照してください。 ただし、でもunsigned char x = x;、現在のドラフトの[basic.lifetime] / 7は次のように述べています。 同様に、オブジェクトの存続期間が始まる前に[...]その値に依存しないglvalueのプロパティを使用することは明確に定義されています。次の場合、プログラムは未定義の動作をします。 glvalueは、オブジェクトにアクセスするために使用されます。 [...] これはx、例のの値がその存続期間中にのみ使用できることを意味するようです。 [basic.lifetime] / 1は言う: [...] タイプTのオブジェクトの存続期間は、次の場合に始まります。 [...]と 初期化(存在する場合)が完了している(空の初期化を含む)([dcl.init])、 [...] …

1
C ++ 20以降、割り当てられたストレージでのポインター演算は許可されていますか?
C ++ 20標準では、配列型は暗黙の存続時間型であると言われています。 非暗黙的なライフタイムタイプの配列を暗黙的に作成できるということですか?このような配列を暗黙的に作成しても、配列の要素は作成されませんか? このケースを考えてみます //implicit creation of an array of std::string //but not the std::string elements: void * ptr = operator new(sizeof (std::string) * 10); //use launder to get a "pointer to object" (which object?) std::string * sptr = std::launder(static_cast<std::string*>(ptr)); //pointer arithmetic on not created array elements well defined? …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.