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

4
テンプレート型の正しいコンストラクターを呼び出す方法は?
次のコードでは、コメント行をそのすぐ上の行と同じように機能させるにはどうすればよいですか? テンプレートの適切なコンストラクターを呼び出す汎用コードにしたいと思いTypeます。 #include <string> #include <iostream> template <typename Type> struct Class { Type data; Class(Type data) : data(data) { } }; int main() { Class<std::string> a = std::string("abc"); // Class<std::string> b = "abc"; std::cout << a.data << std::endl; return 0; }



4
集約の初期化のために空の基本クラスを非表示にする
次のコードを検討してください。 struct A { // No data members //... }; template<typename T, size_t N> struct B : A { T data[N]; } これは、Bを初期化する方法ですB<int, 3> b = { {}, {1, 2, 3} }; 。基本クラスの不要な空の{}を避けたいのです。ここでJarod42によって提案された解決策がありますが、要素のデフォルトの初期化では機能しません。B<int, 3> b = {1, 2, 3};問題B<int, 3> b = {1};はありませんが、デフォルトb.data[1]でb.data[2]はありません。デフォルトで0に初期化されていないため、コンパイラエラーが発生します。基本クラスを構築から「隠す」方法はありますか(またはc ++ 20で存在するでしょう)?

1
std :: ptr :: writeは、書き込むバイトの「初期化されていない状態」を転送しますか?
FFIの境界を越えてポインターサイズのintに収まるトランザクション型を支援するライブラリを開発しています。次のような構造体があるとします。 use std::mem::{size_of, align_of}; struct PaddingDemo { data: u8, force_pad: [usize; 0] } assert_eq!(size_of::<PaddingDemo>(), size_of::<usize>()); assert_eq!(align_of::<PaddingDemo>(), align_of::<usize>()); この構造体には、1データバイトと7パディングバイトがあります。この構造体のインスタンスをaにパックしusize、FFI境界の反対側でアンパックします。このライブラリーは汎用なので、私はMaybeUninitand を使用していptr::writeます: use std::ptr; use std::mem::MaybeUninit; let data = PaddingDemo { data: 12, force_pad: [] }; // In order to ensure all the bytes are initialized, // zero-initialize the buffer let mut packed: …

1
タイムワーピング変数の初期化?
次の単純なforループでは、型なし変数($ n)をインクリメントして配列(@a)を作成します。 my @a = do for 1..3 { state $n; $n.^name, $n++; } say @a; 結果は「種類」が期待されます: [(Any 0) (Int 1) (Int 2)] そして、私は$ nの最初の値として「未定義」の値(すべて)を期待していたので、「種類」と言います。 それは、最初の値が生成された後(Any)、$ nをインクリメントした後($ nの最初のインクリメントの後、Intにキャストした後)、割り当てにタイムワーピングイベントがあり、変更する最初の値。したがって、最初の値は0(ゼロ)になります。 誰かがこの行動の正確なメカニズムを説明できますか?

2
マクロを使用して追加の要素で配列を初期化する
マクロに応じて2つの異なる方法で配列を初期化しています。 # if feature_enabled const int v[4] = {1, 2, 3, 4}; #else const int v[5] = {0, 1, 2, 3, 4}; #endif 問題は、割り当てのデータが実際には大きな行列であり、さまざまな理由から、わずかな変更を加えてデータをコピーするだけでは適切な解決策ではないということです(配列の先頭に1つだけ要素があります)。 最後のn-1要素を本質的に複製せずに、ここで行ったのと同じことを行う方法があるかどうか疑問に思っていました。

1
{0}で構造体を初期化しています
私は本質的にこれと同じであるいくつかのコードをデバッグしています: struct Foo { int a; int b; }; struct Bar { Bar() {} Foo foo{0}; }; 私はのインスタンスを作成するときBar、それは両方のように思えるaし、bゼロに初期化されています。これは保証されていますか?これは仕様のどこにありますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.