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

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

4
<chrono>から整数ミリ秒と浮動小数点秒として期間を取得する方法は?
タイマーと期間のクロノライブラリを使用しようとしています。 Duration frameStart;(アプリの開始から)とDuration frameDelta;(フレーム間の時間)を使用できるようにしたい frameDelta持続時間をミリ秒と浮動秒として取得できるようにする必要があります。 新しいc ++ 11 &lt;chrono&gt;ライブラリでこれをどのように行いますか?私はそれに取り組んでおり、ググリングしています(情報はまばらです)。コードはテンプレート化されており、特別なキャストなどが必要です。このライブラリを正しく使用する方法がわかりません。
93 c++  c++11  timer  chrono 


2
C ++ 11ラムダ実装とメモリモデル
C ++ 11クロージャーについて正しく考える方法とstd::function、それらがどのように実装され、メモリーがどのように処理されるかという点について、いくつかの情報が欲しいのですが。 私は時期尚早の最適化を信じていませんが、私は新しいコードを書くときに自分の選択がパフォーマンスに与える影響を慎重に検討する習慣があります。また、マイクロコントローラーやオーディオシステムなど、非決定的なメモリ割り当て/割り当て解除の一時停止を回避するために、かなりの量のリアルタイムプログラミングを行っています。 したがって、C ++ラムダをいつ使用するか、または使用しないかについての理解を深めたいと思います。 私の現在の理解では、キャプチャされたクロージャのないラムダは、Cコールバックとまったく同じです。ただし、環境が値または参照によってキャプチャされると、匿名オブジェクトがスタックに作成されます。関数から値のクロージャを返す必要がある場合は、それをでラップしstd::functionます。この場合、クロージャメモリはどうなりますか?スタックからヒープにコピーされますか?が解放されるたびに解放されますか?std::functionつまり、aのように参照カウントされstd::shared_ptrますか? リアルタイムシステムでラムダ関数のチェーンをセットアップし、Bを継続引数としてAに渡して、処理パイプラインA-&gt;Bが作成されると思います。この場合、AクロージャーとBクロージャーは一度割り当てられます。これらがスタックとヒープのどちらに割り当てられるかはわかりませんが。ただし、一般的に、これはリアルタイムシステムで安全に使用できます。一方、Bがラムダ関数Cを作成してそれが返す場合、Cのメモリは繰り返し割り当てと割り当て解除が行われ、リアルタイムの使用には受け入れられません。 疑似コードでは、DSPループはリアルタイムで安全になると思います。ブロックAを処理してからBを処理したいのですが、Aは引数を呼び出します。これらの関数は両方ともstd::functionオブジェクトを返すのでf、std::functionオブジェクトは、環境がヒープに格納されます。 auto f = A(B); // A returns a function which calls B // Memory for the function returned by A is on the heap? // Note that A and B may maintain a state // via mutable value-closure! for (t=0; t&lt;1000; …
92 c++  memory  lambda  c++11 

3
ベクトルが大きくなったときに移動セマンティクスを強制する方法は?
std::vectorあるクラスのオブジェクトを持っていますA。クラスは自明ではなく、コピーコンストラクターと移動コンストラクターが定義されています。 std::vector&lt;A&gt; myvec; ベクターをAオブジェクトで(たとえばを使用してmyvec.push_back(a))埋めると、コピーコンストラクターA( const A&amp;)を使用してベクターの要素の新しいコピーをインスタンス化し、ベクターのサイズが大きくなります。 A代わりに、クラスの移動コンストラクタが代わりに使用されていることを強制できますか?

8
プリプロセッサマクロが悪である理由と代替手段は何ですか?
私はいつもこれを尋ねてきましたが、本当に良い答えを受け取ったことはありません。最初の「Hello World」を書く前のほとんどのプログラマーは、「マクロは使用してはならない」、「マクロは悪だ」などのフレーズに遭遇したと思います。私の質問は、なぜですか?新しいC ++ 11では、何年も経たないうちに本当の選択肢はありますか? 簡単な部分は、のようなマクロです#pragma。これは、プラットフォーム固有およびコンパイラ固有であり、ほとんどの場合、#pragma once少なくとも2つの重要な状況でエラーが発生しやすいという重大な欠陥があります。異なるパスに同じ名前があり、一部のネットワークセットアップとファイルシステムにエラーがあります。 しかし、一般的に、マクロとその使用法の代替についてはどうでしょうか?

6
error :: make_uniqueは「std」のメンバーではありません
コードレビューに投稿された次のスレッドプールプログラムをコンパイルしてテストしようとしています。 /codereview/55100/platform-independant-thread-pool-v4 しかし、私はエラーが発生しています threadpool.hpp: In member function ‘std::future&lt;decltype (task((forward&lt;Args&gt;)(args)...))&gt; threadpool::enqueue_task(Func&amp;&amp;, Args&amp;&amp; ...)’: threadpool.hpp:94:28: error: ‘make_unique’ was not declared in this scope auto package_ptr = make_unique&lt;task_package_impl&lt;R, decltype(bound_task)&gt;&gt; (std::move(bound_task), std::move(promise)); ^ threadpool.hpp:94:81: error: expected primary-expression before ‘&gt;’ token auto package_ptr = make_unique&lt;task_package_impl&lt;R, decltype(bound_task)&gt;&gt;(std::move(bound_task), std::move(promise)); ^ main.cpp: In function ‘int main()’: main.cpp:9:17: error: …

4
末尾の戻り値の型の構文スタイルを新しいC ++ 11プログラムのデフォルトにする必要がありますか?[閉まっている]
クローズ。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 3年前に閉鎖されました。 この質問を改善する C ++ 11は、新しい関数構文をサポートしています。 auto func_name(int x, int y) -&gt; int; 現在、この関数は次のように宣言されます。 int func_name(int x, int y); 新しいスタイルはまだ広く採用されていないようです(gcc stlで言う) ただし、この新しいスタイルは、新しいC ++ 11プログラムのどこでも優先する必要がありますか、それとも必要な場合にのみ使用しますか? 個人的には、可能な限り古いスタイルを好みますが、スタイルが混在するコードベースはかなり醜いように見えます。

2
演算子の優先順位以外に、余分な括弧はいつ効果がありますか?
C ++の括弧は多くの場所で使用されます。たとえば、関数の呼び出しやグループ化式で演算子の優先順位を上書きします。不正な余分な括弧(関数呼び出しの引数リストの周りなど)を除いて、C ++の一般的な(ただし絶対ではない)規則は、余分な括弧が害を及ぼすことはありません。 5.1一次式[expr.prim] 5.1.1一般[expr.prim.general] 6括弧で囲まれた式は、型と値が囲まれた式と同じである1次式です。括弧の存在は、式が左辺値かどうかには影響しません。括弧で囲まれた式は、別段の指示がない限り、囲まれた式を使用できるのとまったく同じコンテキストで、同じ意味で使用できます。 質問:基本的な演算子の優先順位を上書きする以外に、余分な括弧がC ++プログラムの意味を変更するのはどのコンテキストですか? 注:意味の異なる2つの構文を許可するのではなく、構文を制限するので、括弧なしのメンバーへのポインター構文の制限&amp;qualified-idは範囲外と見なします。同様に、プリプロセッサマクロ定義内で括弧を使用すると、不要な演算子の優先順位を防ぐことができます。

3
ラムダの明示的な戻り型
このコード(VS2010)をコンパイルすると、次のエラーが発生します。 error C3499: a lambda that has been specified to have a void return type cannot return a value void DataFile::removeComments() { string::const_iterator start, end; boost::regex expression("^\\s?#"); boost::match_results&lt;std::string::const_iterator&gt; what; boost::match_flag_type flags = boost::match_default; // Look for lines that either start with a hash (#) // or have nothing but white-space …

2
この参照( '&this')をラムダでキャプチャできないのはなぜですか?
thisラムダでキャプチャする(オブジェクトプロパティを変更する)正しい方法は次のとおりです。 auto f = [this] () { /* ... */ }; しかし、私が見た次の特異性について興味があります。 class C { public: void foo() { // auto f = [] () { // this not captured auto f = [&amp;] () { // why does this work? // auto f = [&amp;this] () { // Expected …
91 c++  c++11  lambda 


4
cc1plus:エラー:g ++で認識されないコマンドラインオプション“ -std = c ++ 11”
私が使用してコンパイルしようとしているg++とのいずれか-std=c++11またはc++0xフラグ。 ただし、このエラーが発生します cc1plus: error: unrecognized command line option "-std=c++11" g ++ --version g++ (GCC) 4.1.2 20080704 (Red Hat 4.1.2-54) Copyright (C) 2006 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

2
非静的データメンバーとネストされたクラスコンストラクターのクラス内初期化を使用するときのエラー
次のコードは非常に些細なものであり、正常にコンパイルされるはずです。 struct A { struct B { int i = 0; }; B b; A(const B&amp; _b = B()) : b(_b) {} }; このコードをg ++バージョン4.7.2、4.8.1、clang ++ 3.2および3.3でテストしました。このコードでg ++ 4.7.2 segfaultが発生するという事実(http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57770)を除いて、テスト済みの他のコンパイラーは、あまり説明のないエラーメッセージを出力します。 g ++ 4.8.1: test.cpp: In constructor ‘constexpr A::B::B()’: test.cpp:3:12: error: constructor required before non-static data member for ‘A::B::i’ has been …

5
ラムダのサイズが1バイトなのはなぜですか?
C ++でいくつかのラムダのメモリを使用していますが、そのサイズに少し戸惑っています。 これが私のテストコードです: #include &lt;iostream&gt; #include &lt;string&gt; int main() { auto f = [](){ return 17; }; std::cout &lt;&lt; f() &lt;&lt; std::endl; std::cout &lt;&lt; &amp;f &lt;&lt; std::endl; std::cout &lt;&lt; sizeof(f) &lt;&lt; std::endl; } ここで実行できます:http : //fiddle.jyt.io/github/b13f682d1237eb69ebdc60728bb52598 出力は次のとおりです。 17 0x7d90ba8f626f 1 これは、ラムダのサイズが1であることを示唆しています。 これはどのようにして可能ですか? ラムダは、少なくとも、その実装へのポインタであってはなりませんか?
89 c++  c++11  lambda  c++14  sizeof 

3
C ++で条件付きtypedefを作成する方法
私はこのようなことをやろうとしています: #include &lt;iostream&gt; #include &lt;random&gt; typedef int Integer; #if sizeof(Integer) &lt;= 4 typedef std::mt19937 Engine; #else typedef std::mt19937_64 Engine; #endif int main() { std::cout &lt;&lt; sizeof(Integer) &lt;&lt; std::endl; return 0; } しかし、私はこのエラーを受け取ります: error: missing binary operator before token "(" 条件付きtypedefを正しく作成するにはどうすればよいですか?
89 c++  c++11 

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