タグ付けされた質問 「c++」

C ++は汎用プログラミング言語です。もともとCの拡張として設計され、構文は似ていますが、現在は完全に異なる言語になっています。このタグは、C ++コンパイラでコンパイルされる(される)コードに関する質問に使用します。特定の標準リビジョン[C ++ 11]、[C ++ 14]、[C ++ 17]または[C ++ 20]などに関連する質問には、バージョン固有のタグを使用します。

5
C ++の符号なしキーワード
unsignedキーワードはデフォルトでC ++の特定のデータ型になりますか?プロトタイプのクラスの関数を作成しようとしています。 unsigned Rotate(unsigned object, int count) しかし、私は本当に何をunsigned意味するのかわかりません。unsigned intそれは何かのようなものではないでしょうか?
87 c++  unsigned 

3
C ++でコンストラクターと=演算子のオーバーロードをコピーする:一般的な関数は可能ですか?
コピーコンストラクター以来 MyClass(const MyClass&); および=演算子のオーバーロード MyClass& operator = (const MyClass&); ほぼ同じコード、同じパラメーターを持ち、戻り値が異なるだけですが、両方が使用する共通の関数を持つことは可能ですか?

1
テンプレート演繹ガイドとは何ですか?いつ使用する必要がありますか?
C ++ 17標準では、「テンプレート演繹ガイド」が導入されています。これらは、このバージョンの標準で導入されたコンストラクターの新しいテンプレート引数の推論と関係があると思いますが、それらが何であり、何のためにあるのかについての簡単なFAQスタイルの説明はまだ見ていません。 C ++ 17のテンプレート控除ガイドとは何ですか? なぜ(そしていつ)それらが必要なのですか? どうすれば宣言できますか?

12
Linuxで共有ライブラリとしてgoogleTestを設定する方法
Debianは、gTest用のプリコンパイル済みパッケージを提供しなくなりました。フレームワークをプロジェクトのメイクファイルに統合することをお勧めします。しかし、メイクファイルをクリーンに保ちたいです。以前のバージョン(<1.6.0)のようにgTestを設定して、ライブラリに対してリンクできるようにするにはどうすればよいですか?

7
C / C ++:ビットフィールドの順序と配置を強制する
構造体内のビットフィールドの順序はプラットフォーム固有であると読みました。異なるコンパイラ固有のパッキングオプションを使用した場合、データが書き込まれるときに正しい順序で保存されることが保証されますか?例えば: struct Message { unsigned int version : 3; unsigned int type : 1; unsigned int id : 5; unsigned int data : 6; } __attribute__ ((__packed__)); GCCコンパイラを搭載したIntelプロセッサでは、フィールドは示されているようにメモリに配置されていました。Message.versionバッファの最初の3ビットであり、Message.typeその後に続きます。さまざまなコンパイラで同等の構造パッキングオプションを見つけた場合、これはクロスプラットフォームになりますか?


6
プレーン配列の範囲ベースの作業はどのように行われますか?
C ++ 11では、他の言語のforように機能する範囲ベースを使用できますforeach。プレーンなC配列でも機能します。 int numbers[] = { 1, 2, 3, 4, 5 }; for (int& n : numbers) { n *= 2; } いつ停止するかをどうやって知るのですか?forが使用されているのと同じスコープで宣言されている静的配列でのみ機能しますか?これforを動的配列でどのように使用しますか?
87 c++  arrays  foreach  c++11 



3
クラスにスワップ関数を提供する方法は?
swapSTLアルゴリズムで自分を有効にする適切な方法は何ですか? 1)メンバーswap。std::swapSFINAEトリックを使用してメンバーを使用しますかswap。 2)swap同じ名前空間に自立している。 3)の部分的な特殊化std::swap。 4)上記のすべて。 ありがとうございました。 編集:私は私の質問を明確に表現しなかったようです。基本的に、私はテンプレートクラスを持っており、そのクラス用に作成した(効率的な)スワップメソッドを使用するにはSTLアルゴリズムが必要です。
87 c++  algorithm  stl  swap 

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
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:多くの優れた応答。行動の背後にある哲学的または歴史的根拠についてほとんど疑問に思っていたので、ルーサー・ブリセットを選びましたが、関連する仕様書へのジェームズ・マクネリスの参照も役に立ちました。

5
連続したメモリを備えたC ++ベクトルと同等のC#?
C ++ベクトルに相当するC#は何ですか? 私はこの機能を探しています: 標準アレイと比較してアクセスのパフォーマンスを低下させない、連続して格納されたメモリの動的アレイを用意する。 私が探していたところ、彼らはこう言っています.NET equivalent to the vector in C++ is the ArrayList: ArrayListにはその連続したメモリ機能がありますか?
87 c#  c++  vector 

5
C ++でどのように「再割り当て」しますか?
reallocC ++でどのようにできますか?それは言語から欠落しているようです-ありますがnewありdeleteませんresize! プログラムがより多くのデータを読み取るにつれて、それを保持するためにバッファーを再割り当てする必要があるため、これが必要です。delete古いポインタを使用してnew、新しい、より大きなポインタを使用することは正しい選択肢ではないと思います。

2
std ::構造化バインディングを無視しますか?
前奏曲: std::tuple<int, int, int> f(); std::tuple<int, int, float, int> g(); C ++ 1zでは、構造化バインディングの構文が導入され、代わりに書き込みが可能になります。 int a, b, c; std::tie(a, b, c) = f(); 何かのようなもの auto [a, b, c] = f(); ただし、特定のコンポーネントを無視するようstd::tieに指定std::ignoreすることもできます。例: std::tie(a, b, std::ignore, c) = g(); 新しい構造化バインディング構文を使用して同様のことを行うことは可能ですか?それはどのように機能しますか?

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