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

このタグは、C ++ 11としてコンパイルする必要があるコードに使用します(C ++ 14以降で導入された機能は使用しません)。


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をロックすることもできません)。 だからブーストにもセマフォがないので、上記を達成する最も簡単な方法は何ですか?

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 

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つのアプローチの違いは何ですか?さらに重要なことに、どのユースケースでどちらを使用するべきですか?

6
std :: unique_ptrメンバーでカスタム削除機能を使用するにはどうすればよいですか?
unique_ptrメンバーを持つクラスがあります。 class Foo { private: std::unique_ptr<Bar> bar; ... }; Barは、create()関数とdestroy()関数を持つサードパーティのクラスです。 std::unique_ptrスタンドアロン関数でwith it を使用したい場合、次のことができます。 void foo() { std::unique_ptr<Bar, void(*)(Bar*)> bar(create(), [](Bar* b){ destroy(b); }); ... } std::unique_ptrクラスのメンバーとしてこれを行う方法はありますか?


1
-std = c ++ 11と-std = gnu ++ 11の違いは何ですか?
gccとclangのコンパイルパラメータ-std=c++11との違いは何-std=gnu++11ですか?同じ質問c99とgnu99?私はC ++とC標準について知っています。興味があるのはパラメーターの違いです。 私はそれがいくつかの拡張機能に関係していることをどこかで読んだことがありますが、どれがどれで、どのように新しいプロジェクトでどちらを選択するかははっきりしません。
132 c++  gcc  c++11  clang 

3
C ++ 11でthread_localはどういう意味ですか?
thread_localC ++ 11 での説明と混同しています。私の理解では、各スレッドには関数内のローカル変数の一意のコピーがあります。グローバル/静的変数は、すべてのスレッドからアクセスできます(ロックを使用して同期アクセスされる場合があります)。そして、thread_local変数はすべてのスレッドに表示されますが、それらが定義されているスレッドによってのみ変更できますか?それが正しいか?

10
C ++ 11でのスレッドプーリング
関連する質問: C ++ 11について: C ++ 11:std :: thread pooled? C ++ 11のasync(launch :: async)は、高価なスレッドの作成を回避するためにスレッドプールを廃止しますか? ブーストについて: スレッドを再利用するC ++ブーストスレッド boost :: threadとそれらのプールの作成! タスクを何度も作成したり削除したりせずに、タスクをに送信するスレッドのプールを取得するにはどうすればよいですか?これは、結合せずに再同期する永続的なスレッドを意味します。 次のようなコードがあります。 namespace { std::vector<std::thread> workers; int total = 4; int arr[4] = {0}; void each_thread_does(int i) { arr[i] += 2; } } int main(int argc, char *argv[]) { …


6
std :: shared_ptr <void>が機能する理由
シャットダウン時にstd :: shared_ptrを使用して任意のクリーンアップを実行するコードを見つけました。最初はこのコードは機能しないと思っていましたが、次のことを試しました。 #include &lt;memory&gt; #include &lt;iostream&gt; #include &lt;vector&gt; class test { public: test() { std::cout &lt;&lt; "Test created" &lt;&lt; std::endl; } ~test() { std::cout &lt;&lt; "Test destroyed" &lt;&lt; std::endl; } }; int main() { std::cout &lt;&lt; "At begin of main.\ncreating std::vector&lt;std::shared_ptr&lt;void&gt;&gt;" &lt;&lt; std::endl; std::vector&lt;std::shared_ptr&lt;void&gt;&gt; v; { std::cout &lt;&lt; "Creating …
129 c++  c++11  shared-ptr 


2
関数の見出しにある矢印演算子(->)
私は次のコードに出くわしました: template &lt;typename T, typename T1&gt; auto compose(T a, T1 b) -&gt; decltype(a + b) { return a+b; } 理解できないことが1つあります。 -&gt;関数の見出しで矢印演算子()が何を意味するかはどこで確認できますか?純粋に論理的には、-&gt;演算子が型を決定し、それautoが推定されると思いますが、これをまっすぐに取得したいと思います。情報が見つかりません。
128 c++  c++11  auto  decltype 

4
C ++ 11で型を移動不可能にするのはいつですか?
これが検索結果に表示されないことに驚いたのですが、C ++ 11での移動のセマンティクスの有用性を考えると、誰かが以前にこれを尋ねたのではないかと思いました。 C ++ 11でクラスを移動不可能にする必要があるのはいつですか(または私にとっては良い考えですか)? (理由他の既存のコードとの互換性の問題より。)

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