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

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

8
2つのベクトルを連結する最良の方法は何ですか?
マルチトレッドを使用しており、結果をマージしたいと考えています。例えば: std::vector<int> A; std::vector<int> B; std::vector<int> AB; ABにAの内容とBの内容をこの順序で持たせたい。このようなことをする最も効率的な方法は何ですか?
189 c++  vector 

4
C ++でネストされたクラスを使用するのはなぜですか?
誰かがネストされたクラスを理解して使用するためのいくつかの素晴らしいリソースに私を向けることができますか?プログラミング原則のような資料や、このIBM Knowledge Center-Nested Classesなどの資料があります。 しかし、私はまだ彼らの目的を理解するのに苦労しています。誰かが私を助けてくれませんか?


5
c ++マップに挿入対emplace対operator []
私は初めてマップを使用しましたが、要素を挿入する方法はたくさんあることに気付きました。あなたは使用することができemplace()、operator[]またはinsert()、プラス使用してのようにバリアントvalue_typeまたはmake_pair。それらすべてに関する情報や特定のケースに関する質問はたくさんありますが、全体像を理解することはできません。したがって、私の2つの質問は次のとおりです。 それらのそれぞれの利点は何ですか? 標準にエンプレースを追加する必要がありましたか?それがなければ以前は不可能であったことはありますか?

10
if ... else ifステートメントを確率で順序付けするとどのような影響がありますか?
具体的には、一連のif... else ifステートメントがあり、各ステートメントがに評価される相対確率をあらかじめ何らかの方法で知っtrueている場合、それらを確率の順に並べ替えると、実行時間にどのくらいの差が生じますか?たとえば、私はこれを好むべきですか: if (highly_likely) //do something else if (somewhat_likely) //do something else if (unlikely) //do something これに?: if (unlikely) //do something else if (somewhat_likely) //do something else if (highly_likely) //do something ソートされたバージョンの方が速いことは明らかですが、読みやすさや副作用の存在のために、それらを最適でない順序で並べることができます。また、実際にコードを実行するまで、CPUが分岐予測をどの程度うまく処理できるかを判断することも困難です。 それで、これを実験している間に、特定のケースについて自分の質問に答えることになりましたが、他の意見/洞察も聞きたいです。 重要:この質問はif、プログラムの動作に他の影響を与えることなく、ステートメントを任意に並べ替えることができることを前提としています。私の回答では、3つの条件テストは相互に排他的であり、副作用はありません。確かに、望ましい動作を実現するためにステートメントを特定の順序で評価する必要がある場合、効率性の問題は疑わしいものです。


5
関数テンプレートのデフォルトのテンプレート引数
デフォルトのテンプレート引数がクラステンプレートでのみ許可されているのはなぜですか?メンバー関数テンプレートでデフォルトの型を定義できないのはなぜですか?例えば: struct mycclass { template<class T=int> void mymember(T* vec) { // ... } }; 代わりに、C ++は、デフォルトのテンプレート引数がクラステンプレートでのみ許可されることを強制します。
187 c++  templates 


9
CMakeの出力を「bin」ディレクトリにするにはどうすればよいですか?
現在、プラグイン構造でプロジェクトを構築しています。CMakeを使用してプロジェクトをコンパイルしています。プラグインは別のディレクトリにコンパイルされます。私の問題は、CMakeがバイナリとプラグイン、動的ライブラリをコンパイルしてソースのディレクトリ構造に保存することです。CMakeでファイルを./binディレクトリなどに保存するにはどうすればよいですか?
187 c++  plugins  cmake 


21
C ++でフラグとして列挙型を使用する方法?
enumsをフラグとして扱うことは、[Flags]属性を介してC#でうまく機能しますが、C ++でこれを行うための最良の方法は何ですか? たとえば、次のように記述します。 enum AnimalFlags { HasClaws = 1, CanFly =2, EatsFish = 4, Endangered = 8 }; seahawk.flags = CanFly | EatsFish | Endangered; ただし、int/ enum変換に関するコンパイラエラーが発生します。単なる鈍いキャストよりもこれを表現する良い方法はありますか?できれば、boostやQtなどのサードパーティライブラリの構成に依存したくないのですが。 編集:回答に示されているように、seahawk.flagsとして宣言することで、コンパイラエラーを回避できますint。ただし、タイプセーフを適用するためのメカニズムが必要なので、誰かが書けませんseahawk.flags = HasMaximizeButton。
187 c++  enums 

14
C ++で不要な中括弧?
今日、同僚のコードレビューをしているときに、奇妙なことがわかりました。彼は次のような中括弧で新しいコードを囲んでいました: Constructor::Constructor() { existing code { New code: do some new fancy stuff here } existing code } これから、もしあれば、どのような結果になりますか?これを行う理由は何でしょうか?この習慣はどこから来たのですか? 編集: 以下の入力といくつかの質問に基づいて、すでに回答にマークを付けていたとしても、質問にいくつか追加する必要があると思います。 環境は組み込みデバイスです。C ++の服に包まれたレガシーCコードがたくさんあります。多くのC向けC ++開発者がいます。 コードのこの部分には重要なセクションはありません。コードのこの部分でしか見たことがない。主要なメモリ割り当ては行われず、設定されているフラグと、ビットがいじられるだけです。 中括弧で囲まれたコードは次のようなものです。 { bool isInit; (void)isStillInInitMode(&isInit); if (isInit) { return isInit; } } (コードを気にしないで、中かっこに固執してください...;))中かっこの後には、少しいじる、状態チェック、および基本的な信号があります。 私はその人と話しました、そして彼の動機は変数の範囲を制限すること、衝突に名前を付けること、そして私が実際に拾うことができなかった他のいくつかでした。 私のPOVからこれはかなり奇妙に思われ、波かっこがコードに含まれるべきだとは思いません。中かっこでコードを囲むことができる理由についてのすべての回答でいくつかの良い例を見ましたが、代わりにコードをメソッドに分けるべきではありませんか?

16
保護されたコンストラクターまたはプライベートコンストラクターのみを含むクラスで:: std :: make_sharedを呼び出すにはどうすればよいですか?
動作しないこのコードがありますが、その意図は明らかだと思います: testmakeshared.cpp #include <memory> class A { public: static ::std::shared_ptr<A> create() { return ::std::make_shared<A>(); } protected: A() {} A(const A &) = delete; const A &operator =(const A &) = delete; }; ::std::shared_ptr<A> foo() { return A::create(); } しかし、コンパイルするとこのエラーが発生します。 g++ -std=c++0x -march=native -mtune=native -O3 -Wall testmakeshared.cpp In file included from …
187 c++  c++11  shared-ptr 

3
fork()は予想以上に分岐しますか?
次のコードを考えてみましょう。 #include <stdio.h> #include <sys/types.h> #include <unistd.h> int main(void) { int i; for(i = 0; i < 2; i++) { fork(); printf("."); } return 0; } このプログラムは、8つのドットを出力します。それはどのようにして可能ですか?代わりに6つのドットがあるべきではありませんか?
186 c++  c  fork 

4
何がi = i ++ + 1; C ++ 17で合法?
未定義の動作を叫ぶ前に、これはN4659(C ++ 17)に明示的にリストされています i = i++ + 1; // the value of i is incremented まだN3337(C ++ 11) i = i++ + 1; // the behavior is undefined 何が変わったの? 私が収集できるものから、[N4659 basic.exec]から 特に明記されていない限り、個々の演算子のオペランドおよび個々の式の部分式の評価は、シーケンスされていません。[...]演算子のオペランドの値計算は、演算子の結果の値計算の前にシーケンスされます。メモリロケーションへの副作用が同じメモリロケーションへの別の副作用または同じメモリロケーションにあるオブジェクトの値を使用した値の計算に関連してシーケンスされておらず、それらが潜在的に並行していない場合、動作は未定義です。 どこ [N4659 basic.type]で値が定義されている 自明にコピー可能な型の場合、値の表現はオブジェクト表現のビットのセットであり、 あり、実装で定義された一連の値の1つの個別の要素であるvalueます。 から [N3337 basic.exec] 特に明記されていない限り、個々の演算子のオペランドおよび個々の式の部分式の評価は、順序付けされていません。[...]演算子のオペランドの値計算は、演算子の結果の値計算の前にシーケンスされます。スカラーオブジェクトの副作用が、同じスカラーオブジェクトの別の副作用または同じスカラーオブジェクトの値を使用した値の計算に関連してシーケンスされていない場合、動作は未定義です。 同様に、値は [N3337 basic.type]ます 自明にコピー可能な型の場合、値の表現は、オブジェクトで表現された一連のビットであり、実装で定義された一連の値の1つの個別の要素であるvalueを決定します。 それらは重要ではない同時実行性の言及を除いて同一であり、スカラーオブジェクトの代わりにメモリロケーションを使用します。 算術型、列挙型、ポインター型、メンバー型へのポインターstd::nullptr_t、およびこれらの型のcv修飾バージョンは、まとめてスカラー型と呼ばれます。 これは例には影響しません。 [N4659 expr.ass] …

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