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

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


2
ラムダキャプチャと同じ名前のパラメータ-誰が他をシャドウしている?(clangとgcc)
auto foo = "You're using g++!"; auto compiler_detector = [foo](auto foo) { std::puts(foo); }; compiler_detector("You're using clang++!"); clang ++ 3.6.0以降では「clang ++を使用しています!」と出力されます。キャプチャ fooが使用されていないことを警告します。 g ++ 4.9.0以降では、「あなたはg ++を使用しています!」と出力します。パラメータ fooが使用されていないことを警告します。 ここでC ++標準に正確に準拠しているコンパイラはどれですか? ワンドボックスの例

6
代入演算子と `if(this!=&rhs)`を移動します
クラスの代入演算子では、通常、割り当てられているオブジェクトが呼び出し側オブジェクトであるかどうかを確認して、物事を台無しにしないようにする必要があります。 Class& Class::operator=(const Class& rhs) { if (this != &rhs) { // do the assignment } return *this; } 移動代入演算子にも同じものが必要ですか?this == &rhs真実となる状況はありますか? ? Class::operator=(Class&& rhs) { ? }

3
1.0はstd :: generate_canonicalからの有効な出力ですか?
私はいつも、乱数は0と1の間にあり、なし1であると考えていました。つまり、乱数は半開区間[0,1)からの数値です。これはcppreference.comのドキュメントでstd::generate_canonical確認できます。 ただし、次のプログラムを実行すると、 #include <iostream> #include <limits> #include <random> int main() { std::mt19937 rng; std::seed_seq sequence{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; rng.seed(sequence); rng.discard(12 * 629143 + 6); float random = std::generate_canonical<float, std::numeric_limits<float>::digits>(rng); if (random == 1.0f) { std::cout << "Bug!\n"; } return 0; } それは私に次の出力を与えます: Bug! つまり1、MC統合で問題を引き起こす完璧なを生成します。それは有効な動作ですか、それとも私の側にエラーがありますか?これにより、G …
124 c++  c++11  random 

2
c ++ 11ラムダは、使用しない変数をキャプチャしますか?
[=]すべてのローカル変数をラムダ内の値でキャプチャすることを示すために使用すると、コピーされる関数内のすべてのローカル変数、またはラムダによって使用されるすべてのローカル変数だけになりますか? したがって、たとえば、私が持っている場合: vector<int> my_huge_vector(100000); int my_measly_int; some_function([=](int i){ return my_measly_int + i; }); my_huge_vectorはラムダで使用していなくてもコピーされますか?
123 c++  lambda  c++11 

3
このポインタを使用すると、ホットループで奇妙な最適化が解除されます
最近、奇妙な最適化解除に遭遇しました(または最適化の機会を逃しました)。 3ビット整数の配列を8ビット整数に効率的にアンパックするには、この関数を検討してください。ループの繰り返しごとに16の整数をアンパックします。 void unpack3bit(uint8_t* target, char* source, int size) { while(size > 0){ uint64_t t = *reinterpret_cast<uint64_t*>(source); target[0] = t & 0x7; target[1] = (t >> 3) & 0x7; target[2] = (t >> 6) & 0x7; target[3] = (t >> 9) & 0x7; target[4] = (t >> 12) & 0x7; …

5
C ++ 11がC99として指定された初期化リストをサポートしないのはなぜですか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 2年前休業。 この質問を改善する 考慮してください: struct Person { int height; int weight; int age; }; int main() { Person p { .age = 18 }; } 上記のコードはC99では合法ですが、C ++ 11では合法ではありません。 何でしたか c ++ 11 そのような便利な機能のサポートを除外するための標準委員会の理論的根拠?
121 c++  c  c++11  initialization  c99 

6
エラー:削除された関数の使用
私は友人が書いたいくつかのC ++コードに取り組んでいて、gcc4.6でコンパイルしたときにこれまでに見たことのない次のエラーが発生します。 error: use of deleted function ‘GameFSM_<std::array<C, 2ul> >::hdealt::hdealt()’ is implicitly deleted because the default definition would be ill-formed: uninitialized non-static const member ‘const h_t FlopPokerGameFSM_<std::array<C, 2ul> >::hdealt::h’ 編集:これは、boost MSM:Boost Webpageを使用するコードの一部から来ています Edit2:ソースコードの= delete()どこにも使用されていません。 一般的に、このエラーはどういう意味ですか?このタイプのエラーが発生した場合、何を探す必要がありますか?

2
std :: tieはどのように機能しますか?
std::tieあまり考えずに使ってきました。それは機能するので、私はちょうどそれを受け入れました: auto test() { int a, b; std::tie(a, b) = std::make_tuple(2, 3); // a is now 2, b is now 3 return a + b; // 5 } しかし、この黒魔術はどのように機能するのでしょうか?どのように一時的により作成さんstd::tieの変化aとb?これは言語機能ではなくライブラリ機能であるため、私はこれをもっと興味深いものにしています。
120 c++  c++11  tuples 

7
C ++ 11でのCOW std :: string実装の合法性
コピーオンライトはstd::stringC ++ 11での適合を実装するための実行可能な方法ではないというのが私の理解でしたが、最近議論されたとき、私は自分がそのステートメントを直接サポートできないことに気付きました。 C ++ 11がCOWベースの実装を許可しないことは正しいstd::stringですか? もしそうなら、この制限は新しい標準のどこかに(どこで)明示的に述べられていますか? または、この制限は、std::stringCOWベースのの実装を妨げる新しい要件の複合効果であるという意味で、暗黙のうちに含まれていstd::stringますか。この場合、「C ++ 11はCOWベースのstd::string実装を効果的に禁止する」という章と詩のスタイルの派生に興味があります。

1
C ++ 11のasync(launch :: async)は、高価なスレッドの作成を回避するためにスレッドプールを廃止しますか?
それはこの質問に緩く関連しています:std :: threadはC ++ 11にプールされていますか?。質問は異なりますが、意図は同じです。 質問1:高価なスレッドの作成を回避するために、独自の(またはサードパーティのライブラリ)スレッドプールを使用することはまだ意味がありますか? 他の質問の結論は、std::threadプールに依存することはできないということでした(そうでない場合もあります)。ただし、std::async(launch::async)プールされる可能性ははるかに高いようです。 それは標準によって強制されているとは思わないが、私見では、スレッドの作成が遅い場合は、すべての優れたC ++ 11実装がスレッドプーリングを使用すると予想します。新しいスレッドを作成するのが安価なプラットフォームでのみ、私は彼らが常に新しいスレッドを生成することを期待します。 質問2:これは私が考えていることですが、それを証明する事実はありません。私はよく間違えられるかもしれません。それは教育を受けた推測ですか? 最後に、ここでは、スレッドの作成が次のように表現できると私が考える方法を最初に示すサンプルコードをいくつか提供しましたasync(launch::async)。 例1: thread t([]{ f(); }); // ... t.join(); なる auto future = async(launch::async, []{ f(); }); // ... future.wait(); 例2:スレッドを起動して忘れる thread([]{ f(); }).detach(); なる // a bit clumsy... auto dummy = async(launch::async, []{ f(); }); // ... but …

4
gccでC ++ 11を有効にするにはどうすればよいですか?
Mac OSX Mountain Lionではhttp://hpc.sourceforge.netの gcc 4.8.1を使用しています。のto_string関数を使用するC ++プログラムをコンパイルしようとしています<string>。-std=c++11毎回フラグを使用する必要があります: g++ -std=c++11 -o testcode1 code1.cpp デフォルトでこのフラグを含める方法はありますか?
117 c++11  g++ 


2
ベクトルをゼロに初期化するC ++ / C ++ 11
私はC ++ 11で、変数をゼロに初期化する機能を追加したことを知っています double number = {}; // number = 0 int data{}; // data = 0 std::vector固定長のをすべてゼロに初期化する同様の方法はありますか?
117 c++  c++11 

8
C ++ 03とC ++ 11の間に、実行時に検出できる違いがあるとすれば、どのようなものですか?
Cコンパイラーでコンパイルすると0を返し、C ++コンパイラーでコンパイルすると1を返す関数を書くことができます(取るに足らない解決策#ifdef __cplusplusは興味深いもので はありません)。 例えば: int isCPP() { return sizeof(char) == sizeof 'c'; } もちろん、上記がとsizeof (char)同じでない場合にのみ機能しますsizeof (int) 別のよりポータブルなソリューションは次のようなものです: int isCPP() { typedef int T; { struct T { int a[2]; }; return sizeof(T) == sizeof(struct T); } } 例が100%正しいかどうかはわかりませんが、あなたは考えを理解しています。同じ関数を書く方法は他にもあると思います。 C ++ 03とC ++ 11の間に、実行時に検出できる違いがあるとすれば、どのようなものですか?言い換えると、それが適合C ++ 03コンパイラーによってコンパイルされたかC ++ 11コンパイラーによってコンパイルされたかを示すブール値を返す同様の関数を作成することは可能ですか? bool isCpp11() …

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