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

構文がCに似ている、またはCから派生したさまざまなプログラミング言語のキーワード(C ++、C#、Swift、Go、Rustなど)。構文とセマンティクスは言語に依存する可能性があるため、特定のプログラミング言語タグを使用して、 `struct`の使用を含む質問にタグを付けます。キーワードは、他のデータ型で構成されるデータ型を定義または宣言します。構造体の各メンバーには独自のメモリ領域があります(メンバーが単一のメモリ領域を共有する「共用体」とは対照的)。

8
C ++で構造体を比較しているときに==演算子が見つかりません
次の構造体の2つのインスタンスを比較すると、エラーが発生します。 struct MyStruct1 { MyStruct1(const MyStruct2 &_my_struct_2, const int _an_int = -1) : my_struct_2(_my_struct_2), an_int(_an_int) {} std::string toString() const; MyStruct2 my_struct_2; int an_int; }; エラーは: エラーC2678:バイナリ '==':タイプ 'myproj :: MyStruct1'の左側のオペランドをとる演算子が見つかりません(または許容できる変換がありません) どうして?

12
C ++タプルと構造体
std::tupleとデータのみの使用に違いはありstructますか? typedef std::tuple<int, double, bool> foo_t; struct bar_t { int id; double value; bool dirty; } 私がオンラインで見つけたものから、2つの大きな違いがあることがわかりました。1つstructは読みやすく、もう1つはtuple使用できる多くの汎用関数を持っていることです。パフォーマンスに大きな違いはありますか?また、データレイアウトは相互に互換性がありますか(交換可能にキャストされます)?
95 c++  struct  tuples 

10
構造体とクラス
コードで100,000個のオブジェクトを作成しようとしています。それらは小さいもので、2つまたは3つのプロパティのみを持ちます。私はそれらを一般的なリストに入れ、それらがある場合、それらをループし、値aをチェックし、場合によっては値を更新しますb。 これらのオブジェクトをクラスまたは構造体として作成する方が高速/優れていますか? 編集する a。プロパティは値のタイプです(私が考える文字列を除く?) b。彼らは(まだわかりませんが)検証メソッドを持っているかもしれません 編集2 私は疑問に思っていました:ヒープとスタック上のオブジェクトはガベージコレクターによって同等に処理されますか、それとも動作が異なりますか?
93 c#  struct 

9
構造体がインターフェースを実装するのは安全ですか?
構造体がC#を介してCLRにインターフェイスを実装するのがいかに悪いかについて何かを読んだことを覚えているようですが、それについては何も見つからないようです。悪いですか?そうすることの意図しない結果はありますか? public interface Foo { Bar GetBar(); } public struct Fubar : Foo { public Bar GetBar() { return new Bar(); } }
93 c#  interface  struct 

2
C ++構造体の関数
通常、C ++構造体の変数は次のように定義できます。 struct foo { int bar; }; 構造体の関数を定義することもできますか?これらの関数をどのように使用しますか?
93 c++  function  struct 

6
C ++が匿名の構造体を許可しないのはなぜですか?
一部のC ++コンパイラーは、匿名の共用体と構造体を標準C ++の拡張として許可します。これは、時々非常に役立つ、ちょっとした構文上の砂糖です。 これが標準の一部にならないようにする根拠は何ですか?技術的な障害はありますか?哲学的なもの?それともそれを正当化する必要性が十分ではないのですか? これが私が話していることのサンプルです: struct vector3 { union { struct { float x; float y; float z; }; float v[3]; }; }; 私のコンパイラはこれを受け入れますが、「無名の構造体/共用体」はC ++に対する非標準の拡張であることを警告しています。
92 c++  struct  unions 

9
構造体をゼロ/ nullに初期化/リセット
struct x { char a[10]; char b[20]; int i; char *c; char *d[10]; }; 私はこの構造体を埋めて、値を使用しています。次の繰り返しで、私はにすべてのフィールドをリセットしたい0かnull、私はそれを再利用を開始する前に。 どうやってやるの?使用できますmemsetか、それともすべてのメンバーを通過してから個別に実行する必要がありますか?

5
なぜこの構造体のサイズが2ではなく3なのですか?
私はこの構造体を定義しました: typedef struct { char A:3; char B:3; char C:3; char D:3; char E:3; } col; sizeof(col)私は3の出力を与えるが、それは2ではないでしょうか?1つの要素だけをコメント化するsizeofと、2になります。理由はわかりません。3ビットの5つの要素は15ビットに等しく、それは2バイト未満です。 このような構造を定義するときに「内部サイズ」はありますか?私の説明では、これまでの私の言語の概念から、サイズが3ではなく2バイトであると予想していたので、説明が必要です。
91 c++  c  struct 

6
未使用のメンバー変数はメモリを消費しますか?
メンバー変数を初期化し、それを参照/使用しないと、実行時にRAMをさらに消費しますか、またはコンパイラーは単にその変数を無視しますか? struct Foo { int var1; int var2; Foo() { var1 = 5; std::cout << var1; } }; 上記の例では、メンバー 'var1'が値を取得し、コンソールに表示されます。ただし、「Var2」はまったく使用されません。したがって、実行時にそれをメモリに書き込むと、リソースの無駄になります。コンパイラーはこのような状況を考慮に入れて、未使用の変数を単に無視しますか、またはメンバーが使用されているかどうかに関係なく、Fooオブジェクトは常に同じサイズですか?
91 c++  memory  struct 

11
NSArrayにc-structを配置する最良の方法は何ですか?
c構造体をに保存する通常の方法は何NSArrayですか?メリット、デメリット、メモリ処理? 注目すべきは、違いは何だvalueWithBytesとはvalueWithPointer -ジャスティンと以下のナマズが提起しました。 これはvalueWithBytes:objCType:、将来の読者のためのAppleの議論へのリンクです... いくつかの水平思考、よりパフォーマンスで見ているために、Evgenは、使用しての問題提起しているSTL::vector中でC ++を。 (これは興味深い問題を引き起こします:STL::vector最小限の "配列のきちんとした処理"を可能にする高速なCライブラリがありますか? だから元の質問... 例えば: typedef struct _Megapoint { float w,x,y,z; } Megapoint; それで、そのような独自の構造をに保存するための通常の、最良の、慣用的なNSArray方法は何ですか?そしてそのイディオムでメモリをどのように処理しますか? 構造体を格納するための通常のイディオムを具体的に探していることに注意してください。もちろん、新しい小さなクラスを作ることで問題を回避することができます。しかし、私は実際に構造体を配列に配置するための通常のイディオムがどのようにしているかを知りたいと思います。 ところでここにおそらくNSDataアプローチがありますか?最高ではない... Megapoint p; NSArray *a = [NSArray arrayWithObjects: [NSData dataWithBytes:&p length:sizeof(Megapoint)], [NSData dataWithBytes:&p length:sizeof(Megapoint)], [NSData dataWithBytes:&p length:sizeof(Megapoint)], nil]; ちなみに、参考としてJarret Hardieに感謝します。CGPointsこれは、に保存して類似する方法NSArrayです。 NSArray *points = [NSArray arrayWithObjects: [NSValue valueWithCGPoint:CGPointMake(6.9, 6.9)], [NSValue valueWithCGPoint:CGPointMake(6.9, …


5
CおよびC ++が構造体内の配列のメンバーごとの割り当てをサポートしているのに、一般的にはサポートしていないのはなぜですか?
配列のメンバーごとの割り当てがサポートされていないため、以下が機能しないことを理解しています。 int num1[3] = {1,2,3}; int num2[3]; num2 = num1; // "error: invalid array assignment" 私はこれを事実として受け入れ、言語の目的はオープンエンドのフレームワークを提供することであり、配列のコピーなどの実装方法をユーザーに決定させることであると考えました。 ただし、以下は機能します。 struct myStruct { int num[3]; }; struct myStruct struct1 = {{1,2,3}}; struct myStruct struct2; struct2 = struct1; 配列num[3]は、のインスタンスからのインスタンスにメンバーごとに割り当てられstruct1ますstruct2。 配列のメンバーごとの割り当てが構造体でサポートされているのに、一般的にはサポートされていないのはなぜですか? 編集:ロジャーパテのスレッドにコメントのstd ::構造体の文字列-コピー/割り当ての問題?答えの一般的な方向を指しているようですが、私はそれを自分で確認するのに十分なことを知りません。 編集2:多くの優れた応答。行動の背後にある哲学的または歴史的根拠についてほとんど疑問に思っていたので、ルーサー・ブリセットを選びましたが、関連する仕様書へのジェームズ・マクネリスの参照も役に立ちました。

6
タプルvs'out 'vs'struct'の2つの値を返します
2つの値を返す関数について考えてみます。我々は書ける: // Using out: string MyFunction(string input, out int count) // Using Tuple class: Tuple<string, int> MyFunction(string input) // Using struct: MyStruct MyFunction(string input) どちらがベストプラクティスであり、その理由は何ですか?
86 c#  struct  tuples  out  value-type 

6
C-構造体内の関数
構造内に関数を作成しようとしていますが、これまでのところ、次のコードがあります。 typedef struct client_t client_t, *pno; struct client_t { pid_t pid; char password[TAM_MAX]; // -> 50 chars pno next; pno AddClient() { /* code */ } }; int main() { client_t client; //code .. client.AddClient(); } エラー:client.h:24:2:エラー:'{'トークンの前に ' :'、 '、'、 ';'、 '}'または '属性'が必要です。 それを行う正しい方法はどれですか?
86 c  function  struct 

4
ARCは、ファイル-fno-objc-arcにマークを付けているにもかかわらず、構造体または和集合内のObjective-Cオブジェクトを禁止しています。
ARCは、ファイル-fno-objc-arcをマークしているにもかかわらず、構造体または和集合内のObjective-Cオブジェクトを禁止していますか?なぜそうなのですか? -fno-objc-arcとマークすれば、この制限はないと思いました。

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