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

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

5
インライン名前空間とは何ですか?
C ++ 11ではinline namespacesを使用できます。s のすべてのメンバーも自動的に囲みnamespaceます。これの有用なアプリケーションは思いつきません- inline namespaceが必要であり、それが最も慣用的な解決策である状況の簡単で簡潔な例を誰かに教えてもらえますか? (また、a namespaceがinline1つの宣言で宣言されたが、すべての宣言ではなかった場合に何が起こるかは明確ではありません。これは、異なるファイルに存在する可能性があります。これは問題を起こしていませんか?)

8
C ++ 11逆範囲ベースのforループ
イテレーターの方向を逆にするコンテナーアダプターがあるので、範囲ベースのforループでコンテナーを逆方向に反復できますか? 明示的なイテレータでこれを変換します: for (auto i = c.begin(); i != c.end(); ++i) { ... これに: for (auto i = c.rbegin(); i != c.rend(); ++i) { ... これを変換したい: for (auto& i: c) { ... これに: for (auto& i: std::magic_reverse_adapter(c)) { ... そのようなことはありますか、それとも自分で書く必要がありますか?
321 c++  c++11  ranged-loops 



5
メンバー関数でスレッドを開始
std::thread引数を取らずに返すメンバー関数を使ってを作成しようとしていますvoid。機能する構文を理解できません。コンパイラは何があっても文句を言います。実行するspawn()a std::threadを返すように実装する正しい方法は何test()ですか? #include <thread> class blub { void test() { } public: std::thread spawn() { return { test }; } };

8
C ++でのmake_sharedと通常のshared_ptrの違い
std::shared_ptr<Object> p1 = std::make_shared<Object>("foo"); std::shared_ptr<Object> p2(new Object("foo")); 多くのグーグルとスタックオーバーフローの投稿がこれにありますがmake_shared、直接使用するよりもなぜ効率的であるのか理解できませんshared_ptr。 誰かが私にどのようmake_sharedに効率的であるかを理解できるように、作成されたオブジェクトのシーケンスと両方で行われた操作を順を追って説明してくれませんか?参考のために、上記の例を1つ示しました。
276 c++  c++11  shared-ptr 

1
「int main(){(([](){})());}」は有効なC ++ですか?
最近、次の難解なコードに出くわしました。 int main(){(([](){})());} 次のように再フォーマットして、読みやすくします。 int main(){ (([](){})()); // Um... what?!?! } しかし、私(([](){})())は有効なコードがどうあるかについて頭をつかむことができません。 関数ポインタ構文のようには見えません。 オペレーターのオーバーロードのトリックにはなりません。コードはそのままコンパイルされます。 グーグルは、この全記号検索ではあまり役に立たなかった。ただし、Visual Studio 2010でコンパイルされ、何も出力されません。エラーも警告もありませんでした。したがって、有効なコードのように見えます。 私は、JavaScriptとC関数ポインター以外ではとても奇妙な有効なコードを見たことがありません。 これが有効なC ++であると誰かが説明できますか?
271 c++  c++11  lambda  syntax 

10
shared_ptrを参照または値のどちらで渡す必要がありますか?
関数がshared_ptr(boostまたはC ++ 11 STLから)取るとき、それを渡しますか? const参照: void foo(const shared_ptr<T>& p) または値によって: void foo(shared_ptr<T> p)? 最初の方法の方が速いのではないかと思います。しかし、これは本当に価値があるのですか、それとも他に問題がありますか? あなたが選択した理由を教えてください、または場合は、それが問題ではないと思う理由。
270 c++  c++11  boost  shared-ptr 

16
C ++にガベージコレクタがないのはなぜですか?
まず、ガベージコレクションのメリットがあるので、この質問はしていません。これを尋ねる私の主な理由は、Bjarne StroustrupがC ++にある時点でガベージコレクターが含まれると言ったことを知っていることです。 とはいえ、なぜ追加されていないのですか?C ++用のガベージコレクターはすでにいくつかあります。これは、「実行するより簡単に言う」タイプのものの1つにすぎませんか?それとも追加されていない(そしてC ++ 11では追加されない)理由は他にありますか? 相互リンク: C ++のガベージコレクター 明確にするために、C ++が最初に作成されたときにガベージコレクターがなかった理由を理解しています。コレクターを追加できないのはなぜですか。


10
C ++ 11のラムダで、値によるキャプチャにデフォルトで「可変」キーワードが必要なのはなぜですか?
短い例: #include <iostream> int main() { int n; [&](){n = 10;}(); // OK [=]() mutable {n = 20;}(); // OK // [=](){n = 10;}(); // Error: a by-value capture cannot be modified in a non-mutable lambda std::cout << n << "\n"; // "10" } 質問:なぜmutableキーワードが必要なのですか?名前付き関数に渡す従来のパラメーターとはかなり異なります。背後にある理論的根拠は何ですか? 値によるキャプチャの全体のポイントは、ユーザーが一時変数を変更できるようにすることだという印象を受けました。それ以外の場合は、ほとんどの場合、参照によるキャプチャを使用した方がよいのではないでしょうか。 悟りはありますか? (ちなみに私はMSVC2010を使用しています。これは標準のはずです)
256 c++  lambda  c++11 

8
一致する関数ポインターを呼び出すためのタプルの「アンパック」
std::tupleさまざまな数の値を保存しようとしています。これらの値は、保存された型と一致する関数ポインターへの呼び出しの引数として後で使用されます。 私が解決するのに苦労している問題を示す簡単な例を作成しました: #include <iostream> #include <tuple> void f(int a, double b, void* c) { std::cout << a << ":" << b << ":" << c << std::endl; } template <typename ...Args> struct save_it_for_later { std::tuple<Args...> params; void (*func)(Args...); void delayed_dispatch() { // How can I "unpack" params to call func? …

8
カスタムタイプを「範囲ベースのforループ」で機能させるにはどうすればよいですか?
最近の多くの人のように、私はC ++ 11がもたらすさまざまな機能を試しています。私のお気に入りの1つは、「範囲ベースのforループ」です。 という事は承知しています: for(Type& v : a) { ... } 以下と同等です。 for(auto iv = begin(a); iv != end(a); ++iv) { Type& v = *iv; ... } そして、それはbegin()単にa.begin()標準的なコンテナに戻ります。 しかし、カスタムタイプを「範囲ベースのforループ」に対応させるにはどうすればよいでしょうか。 私はちょうど特化すべきであるbegin()とend()? カスタムタイプが名前空間xmlに属している場合、定義する必要がありますxml::begin()かstd::begin()? 要するに、それを行うためのガイドラインは何ですか?

8
Tの完全な定義を知るにはstd :: unique_ptr <T>が必要ですか?
ヘッダーに次のようなコードがあります。 #include &lt;memory&gt; class Thing; class MyClass { std::unique_ptr&lt; Thing &gt; my_thing; }; Thingタイプ定義を含まないcppにこのヘッダーを含めると、VS2010-SP1でコンパイルできません。 1&gt; C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ VC \ include \ memory(2067):error C2027:use of undefined type 'Thing' 置き換えstd::unique_ptrによってstd::shared_ptr、それがコンパイルされます。 したがって、std::unique_ptr完全な定義が必要なのは現在のVS2010 の実装であり、完全に実装に依存していると思います。 またはそれは?標準の要件に、std::unique_ptrの実装が前方宣言のみで機能することを不可能にする何かがありますか?へのポインタのみを保持する必要があるため、奇妙に感じThingますね。

12
to_stringはstdのメンバーではない、とg ++は言う(mingw)
私は単語が意味のためにランダムに私にフラッシュされるだろう小さな語彙記憶プログラムを作っています。Bjarne Stroustroupが教えてくれたように、標準のC ++ライブラリを使用したいのですが、一見奇妙な問題がすぐに発生しました。 ファイルに格納できるようにlong整数をに変更したいstd::string。私はto_string()同じものを採用しています。問題は、g ++(--compileversionフラグで言及されているバージョン4.7.0)でコンパイルすると、次のようになります。 PS C:\Users\Anurag\SkyDrive\College\Programs&gt; g++ -std=c++0x ttd.cpp ttd.cpp: In function 'int main()': ttd.cpp:11:2: error: 'to_string' is not a member of 'std' このエラーを発生させる私のプログラムは次のとおりです。 #include &lt;string&gt; int main() { std::to_string(0); return 0; } しかし、msdnライブラリーがそれが存在することを明確に示しており、Stack Overflow(g ++バージョン4.5の場合)に関する以前の質問で、-std=c++0xフラグを使用してオンにできることを示しているため、そうなる可能性はありません。何が悪いのですか?
245 c++  c++11  g++  mingw  tostring 

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