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

3
C ++ 11では、非静的メンバーと非定数メンバーのクラス内初期化が可能です。何が変わったの?
C ++ 11より前は、整数型または列挙型の静的constメンバーに対してのみクラス内初期化を実行できました。Stroustrupは、C ++ FAQでこれについて説明し、次の例を示しています。 class Y { const int c3 = 7; // error: not static static int c4 = 7; // error: not const static const float c5 = 7; // error: not integral }; そして、次の理由: では、なぜこれらの不便な制限が存在するのでしょうか。クラスは通常、ヘッダーファイルで宣言され、ヘッダーファイルは通常多くの変換ユニットに含まれます。ただし、複雑なリンカールールを回避するために、C ++ではすべてのオブジェクトに一意の定義が必要です。C ++で、オブジェクトとしてメモリに格納する必要のあるエンティティのクラス内定義が許可されている場合、このルールは破られます。 ただし、C ++ 11はこれらの制限を緩和し、非静的メンバーのクラス内初期化を可能にします(§12.6.2/ 8)。 非委任コンストラクターで、特定の非静的データメンバーまたは基本クラスがmem-initializer-idで指定されていない場合(コンストラクターにctor-initializerがないためにmem-initializer-listがない場合を含む)エンティティが抽象クラス(10.4)の仮想基本クラスではない場合、 エンティティが中括弧または等しい初期化子を持つ非静的データメンバーである場合、エンティティは8.5で指定されているように初期化されます。 それ以外の場合、エンティティがバリアントメンバー(9.5)の場合、初期化は実行されません。 それ以外の場合、エンティティはデフォルトで初期化されます(8.5)。 セクション9.4.2では、非const静的メンバーがconstexpr指定子でマークされている場合、それらのクラス内初期化も許可されます。 …

5
「int * ptr = int()」値の初期化はどのように違法ではありませんか?
次のコード(ここから取得): int* ptr = int(); Visual C ++でコンパイルし、ポインタを値初期化します。 そんなことがあるものか?I平均int()利回り型のオブジェクトintと私は割り当てることができませんintポインタに。 上記のコードはどのように違法ではありませんか?

3
__init__.pyにコードを追加する
djangoのモデルシステムがどのように機能するかを調べていると、理解できないことがわかりました。 空の__init__.pyファイルを作成して、現在のディレクトリがパッケージであることを指定していることを知っています。また、__init__.pyimport *が正しく機能するように変数を設定できます。 しかし、djangoはfrom ... import ...ステートメントの束を追加し、のクラスの束を定義し__init__.pyます。どうして?これは物事を乱雑に見せるだけではありませんか?このコードが必要な理由はあり__init__.pyますか?

4
クロスの初期化の兆候は何ですか?
次のコードについて考えてみます。 #include <iostream> using namespace std; int main() { int x, y, i; cin >> x >> y >> i; switch(i) { case 1: // int r = x + y; -- OK int r = 1; // Failed to Compile cout << r; break; case 2: r = x …


7
(なぜ)初期化されていない変数の未定義の動作を使用していますか?
私が持っている場合: unsigned int x; x -= x; この式の後でゼロになるx はずであることは明らかですが、私が見るところはどこでも、このコードの動作はx(減算の前まで)の値だけでなく、未定義であると言われています。 2つの質問: このコードの動作は本当に未定義ですか? (たとえば、準拠システムでコードがクラッシュする可能性がありますか?) もしそうなら、ここでゼロであるべきであることが完全に明らかであるのに、なぜCは動作が未定義でxあると言うのですか? つまり、ここで動作を定義しないことによって得られる利点は何ですか? 明らかに、コンパイラは、単に使用できるものは何でもそれは、変数内の「便利」とみなし、それが意図したとおりに動作します...そのアプローチと間違って何ガベージ値はありますか?

6
C ++構造体を初期化する適切な方法
私たちのコードには、POD(Plain Old Datastructure)構造体が含まれています(これは、最初に初期化する必要がある他の構造体とPOD変数を含む基本的なc ++構造体です)。 私が読んだものに基づいて、それは次のようです: myStruct = (MyStruct*)calloc(1, sizeof(MyStruct)); 次のように、すべての値をゼロに初期化する必要があります。 myStruct = new MyStruct(); ただし、構造体が2番目の方法で初期化されると、Valgrindは後で、これらの変数が使用されたときに「条件付きジャンプまたは移動は初期化されていない値に依存する」と文句を言います。私の理解はここに欠陥がありますか、それともValgrindは誤検知を投げていますか?

7
2D配列全体を1つの値で初期化する
次の宣言で int array[ROW][COLUMN]={0}; すべてゼロの配列を取得しますが、次の配列を使用します int array[ROW][COLUMN]={1}; すべて1つの値を持つ配列を取得しません。デフォルト値は0のままです。 なぜこの動作をし、どのようにすべて1で初期化できますか? 編集:memset値を1として使用すると、各バイトが1に設定されるため、各配列セルの実際の値は1ではなく16843009。になることを理解しました。1に設定するにはどうすればよいですか?


4
「intchar」の2つのタイプで変数を宣言する
私はC ++の初心者で、Bjarne Stroustrupのプログラミング:C ++を使用した原則と実践を読んでいます。 3.9.2安全でない変換に関するセクションで、著者は言及しました イニシャライザが整数リテラルの場合、コンパイラは実際の値をチェックし、ナローイングを意味しない値を受け入れることができます。 int char b1 {1000}; // error: narrowing (assuming 8-bit chars) 私はこの宣言に戸惑っています。2つのタイプ(intとchar)を使用します。私はこれまでJavaとSwift(私が比較的よく知っている2つの言語)でそのような宣言を見たことがありません。これはタイプミスですか、それとも有効なC ++構文ですか?

2
このC#辞書の初期化はどのように正しいのですか?
私は以下に遭遇しましたが、なぜ構文エラーが発生しなかったのかと思います。 var dict = new Dictionary<string, object> { ["Id"] = Guid.NewGuid(), ["Tribes"] = new List<int> { 4, 5 }, ["MyA"] = new Dictionary<string, object> { ["Name"] = "Solo", ["Points"] = 88 } ["OtherAs"] = new List<Dictionary<string, object>> { new Dictionary<string, object> { ["Points"] = 1999 } } }; 「MyA」と「OtherAs」の間に「、」がないことに注意してください。 ここで混乱が起こります: …

4
const char *配列初期化コンマがない場合にコンパイラ警告を生成します
Cコードで文字列リテラルテーブルをよく使用しています。これらのテーブルはすべて次のようになります。 static const char* const stateNames[STATE_AMOUNT] = { "Init state", "Run state", "Pause state", "Error state", }; 上記のコードの問題は、テーブルが長くなり、開発中に変更された場合、時々カンマを忘れることです。コードはコンマがないため問題なくコンパイルされますが、最後の文字列がに設定されているため、プログラムがクラッシュしNULLます。検証にはMinGWおよびKeilコンパイラを使用しました。 コンマが欠落している場合、私の初期化に対してコンパイラ警告を生成する方法はありますか?
53 c  initialization 

4
初期化されていないメンバーを持つ構造体をコピーする
一部のメンバーが初期化されていない構造体をコピーすることは有効ですか? 未定義の動作ではないかと思いますが、その場合、初期化されていないメンバーを構造体に残すと(それらのメンバーが直接使用されない場合でも)、非常に危険になります。だから、規格にそれを許すものがあるのか​​しら。 たとえば、これは有効ですか? struct Data { int a, b; }; int main() { Data data; data.a = 5; Data data2 = data; }

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])、 [...] …

6
C ++のオーバーロードされたコンストラクターによる不明な型の変数の初期化
主にpythonのバックグラウンドから来ているので、C ++で型を操作するのに多少苦労しました。 異なる型をパラメーターとして受け取るいくつかのオーバーロードされたコンストラクターの1つを介してクラス変数を初期化しようとしています。autoキーワードの使用は変数の自動宣言に使用できることを読みましたが、私の場合、コンストラクターが選択されるまで初期化されません。しかし、コンパイラーは初期化しないことに満足していませんvalue。 class Token { public: auto value; Token(int ivalue) { value = ivalue; } Token(float fvalue) { value = fvalue; } Token(std::string svalue) { value = svalue; } void printValue() { std::cout << "The token value is: " << value << std::endl; } }; Pythonでは、次のようになります。 class Token(): def …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.