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

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

19
/usr/lib/libstdc++.so.6:バージョン `GLIBCXX_3.4.15 'が見つかりません
UbuntuでGLIBCXX_3.4.15を入手するにはどうすればよいですか?コンパイルしている一部のプログラムを実行できません。 私がする時: strings /usr/lib/libstdc++.so.6 | grep GLIBC 私は得ます: GLIBCXX_3.4 GLIBCXX_3.4.1 GLIBCXX_3.4.2 GLIBCXX_3.4.3 GLIBCXX_3.4.4 GLIBCXX_3.4.5 GLIBCXX_3.4.6 GLIBCXX_3.4.7 GLIBCXX_3.4.8 GLIBCXX_3.4.9 GLIBCXX_3.4.10 GLIBCXX_3.4.11 GLIBCXX_3.4.12 GLIBCXX_3.4.13 GLIBCXX_3.4.14 GLIBC_2.2.5 GLIBC_2.3 GLIBC_2.4 GLIBC_2.3.4 GLIBC_2.3.2 GLIBCXX_FORCE_NEW GLIBCXX_DEBUG_MESSAGE_LENGTH 助けてくれてありがとう!
135 c++  gcc  libstdc++ 

13
タプルを可変長テンプレート関数の引数に拡張するにはどうすればよいですか?
可変個のテンプレート引数を持つテンプレート関数の場合を考えます。 template<typename Tret, typename... T> Tret func(const T&... t); 今、私はt値のタプルを持っています。func()引数としてタプル値を使用して呼び出すにはどうすればよいですか?bind()functionオブジェクトとcall()functionについて、そしてapply()いくつかの古くなったドキュメントで関数についても読みました。GNU GCC 4.4実装call()はbind()クラスに関数があるようですが、この件に関するドキュメントはほとんどありません。 一部の人々は手書きの再帰的ハックを提案しますが、可変テンプレートの引数の真の価値は、上記のような場合にそれらを使用できることです。 誰かが解決策を持っているか、それについてどこで読むべきかについてのヒントはありますか?
135 c++  c++11  arguments  tuples 

1
std :: vector :: erase()およびstd :: deque :: erase()での割り当てのコピー/移動
答えるの過程では別の質問を私が少し異なる文言につまずいたstd::vector::erase()とstd::deque::erase()。 これはC ++ 14が言っていることですstd::deque::erase([deque.modifiers]/4-6私の強調): 効果: ... 複雑さ:デストラクタへの呼び出しの数は消去された要素の数と同じですが、代入演算子の呼び出しの数の数は、消去された要素の前の要素の数と後の要素の数の小さい方以下です消去された要素。 スロー:コピーコンストラクター、移動コンストラクター、割り当て演算子、または移動割り当て演算子によって例外がスローされない限り、何も発生しません。T。 そして、これがstd::vector::erase([vector.modifiers]/3-5)について言っていることです: 効果: ... 複雑さ:のデストラクタはT、消去された要素の数と等しい回数と呼ばれますが、移動代入演算子はT、消去された要素の後のベクトル内の要素の数と等しい回数と呼ばれます。 スロー:のコピーコンストラクター、移動コンストラクター、割り当て演算子、または移動割り当て演算子によって例外がスローされない限り、何も起こりませんT。 ご覧のとおり、両方の例外仕様は同じですが、std::vector代入代入演算子が呼び出されることが明示されているためです。 以下のための要件もありますTされるようにMoveAssignableするためにerase()、両方との仕事にstd::vectorとはstd::deque(表100)が、これは移動代入演算子の存在を意味するものではありません。一つはコピー代入演算子を定義し、移動代入演算子を定義することはできませんが、このクラスの意志をであるMoveAssignable。 念のため、GCCとClangで確認しました。実際にstd::vector::erase()移動代入演算子がない場合は、コピー代入演算子を呼び出しstd::deque::erase()、同じことを行います(デモ)。 だから問題は、私は何かを逃したのか、またはこれは規格の(編集上の)問題なのか? 更新:LWGの問題#2477を 送信しました。

6
C ++ 11ランダムライブラリを使用して乱数を生成する
タイトルが示すように、私は新しいC ++ 11 <random>ライブラリを使用して乱数を生成する方法を理解しようとしています。私はこのコードでそれを試しました: std::default_random_engine generator; std::uniform_real_distribution<double> uniform_distance(1, 10.001); 私が持っているコードの問題は、コンパイルして実行するたびに、常に同じ数が生成されることです。だから私の質問は、ランダムライブラリの他の関数が本当にランダムでありながらこれを達成できるのですか? 私の特定の使用例では、範囲内の値を取得しようとしていました [1, 10]
135 c++  c++11  random  range 

4
ラムダのパラメーターの型と戻り値の型を理解することは可能ですか?
ラムダを考えると、それがパラメーターの型と戻り値の型を理解することは可能ですか?はいの場合、どのように? 基本的に、私はlambda_traitsこれを以下の方法で使用できるようにしたい: auto lambda = [](int i) { return long(i*10); }; lambda_traits<decltype(lambda)>::param_type i; //i should be int lambda_traits<decltype(lambda)>::return_type l; //l should be long 背後にある動機は、lambda_traits引数としてラムダを受け入れる関数テンプレートで使用したいことであり、関数内のパラメーターの型と戻りの型を知る必要があります。 template<typename TLambda> void f(TLambda lambda) { typedef typename lambda_traits<TLambda>::param_type P; typedef typename lambda_traits<TLambda>::return_type R; std::function<R(P)> fun = lambda; //I want to do this! //... } とりあえず、ラムダは引数を1つだけ取ると想定できます。 …


4
C ++ゼロ初期化-このプログラムの「b」が初期化されていないのに「a」が初期化されるのはなぜですか?
このスタックオーバーフローの質問に対する受け入れられた(そして唯一の)回答によると、 コンストラクタを定義する MyTest() = default; 代わりに、オブジェクトをゼロ初期化します。 次に、なぜ次のことをするのですか? #include <iostream> struct foo { foo() = default; int a; }; struct bar { bar(); int b; }; bar::bar() = default; int main() { foo a{}; bar b{}; std::cout << a.a << ' ' << b.b; } この出力を生成します: 0 32766 定義されている両方のコンストラクタがデフォルトですか?正しい?また、PODタイプの場合、デフォルトの初期化はゼロ初期化です。 そして、この質問に対する受け入れられた答えによれば、 PODメンバーがコンストラクターでもC …

10
C ++ 0xにはセマフォがありませんか?スレッドを同期するには?
C ++ 0xがセマフォなしで提供されるのは本当ですか?セマフォの使用に関するスタックオーバーフローに関する質問はすでにいくつかあります。私はそれら(posixセマフォ)を常に使用して、スレッドに別のスレッドのイベントを待機させます。 void thread0(...) { doSomething0(); event1.wait(); ... } void thread1(...) { doSomething1(); event1.post(); ... } 私がミューテックスでそれをするなら: void thread0(...) { doSomething0(); event1.lock(); event1.unlock(); ... } void thread1(...) { event1.lock(); doSomethingth1(); event1.unlock(); ... } 問題:醜く、スレッド1が最初にミューテックスをロックすることは保証されていません(同じスレッドがミューテックスをロックおよびロック解除する場合、スレッド1およびスレッド1が開始する前にイベント1をロックすることもできません)。 だからブーストにもセマフォがないので、上記を達成する最も簡単な方法は何ですか?

8
C ++は16進文字列を符号付き整数に変換します
16進文字列をC ++で32ビットの符号付き整数に変換したい。 したがって、たとえば、16進数の文字列 "fffefffe"があります。これのバイナリ表現は11111111111111101111111111111110です。これの符号付き整数表現は-65538です。 C ++でこの変換を行うにはどうすればよいですか?これは、負でない数に対しても機能する必要があります。たとえば、16進数の文字列「0000000A」は、2進数で00000000000000000000000000001010、10進数で10です。
135 c++  integer  hex  signed 

1
先物対約束
私は自分を未来と約束の違いと混同しています。 明らかに、それらは異なる方法やものを持っていますが、実際のユースケースは何ですか? それは...ですか?: 非同期タスクを管理しているときは、futureを使用して「in future」の値を取得します 私が非同期タスクの場合、戻り値の型としてpromiseを使用して、ユーザーが私のpromiseから未来を取得できるようにします
135 c++  c++11  promise  future 


16
クラスに特定のシグネチャのメンバー関数があるかどうかを確認する
私は、クラスが特定の署名の特定のメンバー関数を持っているかどうかを検出するためのテンプレートトリックを求めています。 問題はここで引用したものと似てい ます が、同じではありません。Sutterの本の項目で、クラスCがメンバー関数を提供する必要があるという質問に答えました特定の署名がないと、プログラムはコンパイルされません。私の問題では、クラスにその機能がある場合は何かをする必要があります。 同様の問題がboost :: serializationにも直面しましたが、私が彼らが採用した解決策は好きではありません。特定のメンバー関数を定義しない限り、デフォルトで特定のシグネチャを持つフリー関数(定義する必要がある)を呼び出すテンプレート関数(彼らの場合、特定のシグネチャを持つ特定のタイプの2つのパラメータをとる「シリアライズ」、それ以外の場合、コンパイルエラーが発生します。それは、侵入型と非侵入型の両方のシリアライゼーションを実装することです。 次の2つの理由で、このソリューションは好きではありません。 非侵入型にするには、boost :: serialization名前空間にあるグローバルな「serialize」関数をオーバーライドする必要があります。これにより、クライアントコードで名前空間のブーストと名前空間のシリアル化を開くことができます。 この混乱を解決するためのスタックは、10〜12の関数呼び出しでした。 そのメンバー関数を持たないクラスのカスタム動作を定義する必要があり、エンティティは異なる名前空間内にあります(ある名前空間で定義されているグローバル関数を別の名前空間にある間にオーバーライドしたくない) このパズルを解くためのヒントを教えてもらえますか?
135 c++  c++11  templates  sfinae 

9
再帰関数をインライン化できますか?
inline int factorial(int n) { if(!n) return 1; else return n*factorial(n-1); } 私がこれを読んでいたとき、上記のコードがコンパイラによって正しく処理されない場合、「無限コンパイル」につながることがわかりました。 コンパイラーは関数をインライン化するかどうかをどのように決定しますか?

22
C ++コードの単体テスト-ツールと方法論[終了]
閉まっている。この質問はスタックオーバーフローのガイドラインを満たしていません。現在、回答を受け付けていません。 この質問を改善してみませんか?Stack Overflowのトピックとなるように質問を更新します。 4年前休業。 この質問を改善する 私は数年前から開発されている大規模なc ++システムに取り組んでいます。既存のコードの品質を向上させるための取り組みの一環として、大規模な長期リファクタリングプロジェクトに取り組みました。 C ++で単体テストを作成するのに役立つ優れたツールを知っていますか?たぶんJunitやNunitに似ていますか? 誰かがユニットテストを考慮せずに書かれたモジュールのユニットテストを書く方法論について何か良いアドバイスを与えることはできますか?

3
packaged_taskとasyncの違いは何ですか
C ++ 11のスレッドモデルで作業しているときに、 std::packaged_task<int(int,int)> task([](int a, int b) { return a + b; }); auto f = task.get_future(); task(2,3); std::cout << f.get() << '\n'; そして auto f = std::async(std::launch::async, [](int a, int b) { return a + b; }, 2, 3); std::cout << f.get() << '\n'; まったく同じことをしているようです。で実行std::asyncした場合、大きな違いがある可能性があることは理解していますが、std::launch::deferredこの場合は違いますか? これらの2つのアプローチの違いは何ですか?さらに重要なことに、どのユースケースでどちらを使用するべきですか?

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