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

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


3
「* thisの右辺値参照」とは何ですか?
clangのC ++ 11ステータスページで「* thisの右辺値参照」と呼ばれる提案に出くわしました。 私は右辺値参照についてかなり読んで理解しましたが、私はこれについて知っているとは思いません。また、この用語を使用しても、ウェブ上で多くのリソースを見つけることができませんでした。 ページに提案書へのリンクがあります:N2439(移動のセマンティクスを* thisに拡張しています)が、そこから多くの例を取得していません。 この機能については何ですか?


1
C ++ 11を有効にするとstd :: vectorパフォーマンスが低下する
C ++ 11を有効にすると、小さなC ++スニペットで興味深いパフォーマンスの低下が見つかりました。 #include <vector> struct Item { int a; int b; }; int main() { const std::size_t num_items = 10000000; std::vector<Item> container; container.reserve(num_items); for (std::size_t i = 0; i < num_items; ++i) { container.push_back(Item()); } return 0; } g ++(GCC)4.8.2 20131219(プレリリース)とC ++ 03を使用すると、次のようになります。 milian:/tmp$ g++ -O3 main.cpp && …
235 c++  performance  gcc  c++11  vector 

4
なぜemplace_backの代わりにpush_backを使用するのですか?
C ++ 11ベクトルには新しい関数がありますemplace_back。push_backコンパイラの最適化に依存してコピーを回避するとは異なり、emplace_back完全な転送を使用して引数をコンストラクターに直接送信し、オブジェクトをインプレースで作成します。私にemplace_backは、すべてのpush_backことができるように思えますが、場合によっては、それがうまくいくこともあります(悪くなることはありません)。 どのような理由で使用する必要がありますpush_backか?
232 c++  c++11  std 


10
ラムダ関数をテンプレート化できますか?
C ++ 11では、ラムダ関数をテンプレート化する方法はありますか?それともテンプレート化するには本質的に具体的すぎますか? 代わりに、古典的なテンプレートクラス/ファンクタを定義できることを理解していますが、問題はより似ています:言語はテンプレートのラムダ関数を許可しますか?
230 c++  templates  lambda  c++11 

4
いつどのようなポインターを使用しますか?
さて、私が生計を立てるためにC ++を最後に書いたのstd::auto_ptrは、すべてのstd libが利用でき、大流行していましたboost::shared_ptr。提供されている他のスマートポインターの種類のブーストを実際に調べたことはありません。C ++ 11が、ブーストで生まれた型のいくつかを提供することを理解していますが、すべてではありません。 では、誰かがどのスマートポインターをいつ使用するかを決定する簡単なアルゴリズムを持っているのでしょうか。できれば、ダムポインター(のような生のポインターT*)とブーストスマートポインターの残りの部分に関するアドバイスを含めます。(このような何かが素晴らしいでしょう)。

10
C ++ 11にはどのような重大な変更が導入されていますか?
古いコードのコンパイルを停止させるC ++ 11の変更の少なくとも1つはexplicit operator bool()、標準ライブラリに導入され、operator void*()。確かに、これが機能しなくなるコードはおそらく最初から有効ではなかったはずのコードですが、それでもなお重大な変更です。以前は有効であったプログラムはもはや機能しなくなりました。 他に重大な変更はありますか?
227 c++  c++11 



14
C ++ 11のautoキーワードでは多すぎますか?
私はauto、C ++ 11標準で利用できる新しいキーワードを、それが設計されたと考えている複雑なテンプレート型に対して使用しています。しかし、私はそれを次のものにも使用しています: auto foo = std::make_shared<Foo>(); そしてもっと懐疑的に: auto foo = bla(); // where bla() return a shared_ptr<Foo> 私はこのトピックについてあまり議論していません。と思われるautoタイプは、多くの場合、文書化と健全性チェックの形であることから、過剰に使用することができます。使用の際にどこに線を引くautoか、この新機能の推奨される使用例は何ですか? 明確にするために、私は哲学的な意見を求めているのではありません。標準的な委員会によるこのキーワードの意図された使用をお願いします。おそらく、その意図された使用が実際にどのように実現されるかについてのコメントが必要です。 補足:この質問は、SE.Programmersに移動され、Stack Overflowに戻されました。これに関する議論は、このメタ質問にあります。

2
unique_ptrをベクターにpush_backできないのはなぜですか?
このプログラムの何が問題になっていますか? #include <memory> #include <vector> int main() { std::vector<std::unique_ptr<int>> vec; int x(1); std::unique_ptr<int> ptr2x(&x); vec.push_back(ptr2x); //This tiny command has a vicious error. return 0; } エラー: In file included from c:\mingw\bin\../lib/gcc/mingw32/4.5.0/include/c++/mingw32/bits/c++allocator.h:34:0, from c:\mingw\bin\../lib/gcc/mingw32/4.5.0/include/c++/bits/allocator.h:48, from c:\mingw\bin\../lib/gcc/mingw32/4.5.0/include/c++/memory:64, from main.cpp:6: c:\mingw\bin\../lib/gcc/mingw32/4.5.0/include/c++/bits/unique_ptr.h: In member function 'void __gnu_cxx::new_allocator<_Tp>::construct(_Tp*, const _Tp&) [with _Tp = std::unique_ptr<int>, _Tp* …

6
make_uniqueおよび完全な転送
std::make_unique標準C ++ 11ライブラリに関数テンプレートがないのはなぜですか?見つけた std::unique_ptr<SomeUserDefinedType> p(new SomeUserDefinedType(1, 2, 3)); 少し冗長。次の方がずっといいと思いませんか? auto p = std::make_unique<SomeUserDefinedType>(1, 2, 3); これはnew見事に非表示になり、タイプについては1回だけ言及します。 とにかく、ここに私の実装の試みがありますmake_unique: template<typename T, typename... Args> std::unique_ptr<T> make_unique(Args&&... args) { return std::unique_ptr<T>(new T(std::forward<Args>(args)...)); } std::forwardコンパイルするのにかなり時間がかかりましたが、それが正しいかどうかはわかりません。それは...ですか?正確にはstd::forward<Args>(args)...どういう意味ですか?コンパイラはそれを何で作っていますか?


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