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

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

4
auto &&は何を教えてくれますか?
あなたがのようなコードを読んだ場合 auto&& var = foo(); ここで、fooタイプの値によって返す任意の関数ですT。次にvar、へのタイプの右辺値参照の左辺値ですT。しかし、これは何を意味するのvarでしょうか?それは私たちのリソースを盗むことを許可されているということですvarか?を使用auto&&してコードの読者に、unique_ptr<>あなたが独占的な所有権を持っていることを伝えるためにa を返すときのようなことを伝えるために使用すべき合理的な状況はありますか?そして、たとえばクラス型のT&&場合Tはどうでしょうか? auto&&テンプレートプログラミング以外のユースケースがあるかどうかを理解したいだけです。この記事の例で説明されているものと同様に、スコット・マイヤーズのユニバーサルリファレンス。

6
Qt CreatorでC ++ 11を有効にする方法は?
タイトルはかなりわかりやすいです。Qt Creator 2.7.0をダウンロードし、いくつかの基本的なC ++ 11コードをコンパイルしようとしています。 int my_array[5] = {1, 2, 3, 4, 5}; for(int &x : my_array) { x *= 2; } 次のエラーが表示されます。 range based for loops are not allowed in c++ 98 mode しかし、この記事によると、このバージョンのQt CreatorはC ++ 11をサポートしています。どうすれば有効にできますか?
167 c++  qt  c++11 

8
const参照としてのラムダキャプチャ?
ラムダ式でconst参照によってキャプチャすることは可能ですか? 以下にマークされている割り当てを失敗させたい、例えば: #include <cstdlib> #include <vector> #include <string> #include <algorithm> using namespace std; int main() { string strings[] = { "hello", "world" }; static const size_t num_strings = sizeof(strings)/sizeof(strings[0]); string best_string = "foo"; for_each( &strings[0], &strings[num_strings], [&best_string](const string& s) { best_string = s; // this should fail } ); return …
166 c++  c++11  lambda  c++14 

3
関数シグネチャでstd :: enable_ifを避ける必要があるのはなぜですか
スコットマイヤーズは、彼の次の本EC ++ 11の内容とステータスを投稿しました。この本の1つの項目は、「std::enable_if関数のシグネチャでの回避」である可能性があると書いています。 std::enable_if 関数の引数として、戻り値の型として、またはクラステンプレートまたは関数テンプレートのパラメーターとして使用して、関数またはクラスをオーバーロードの解決から条件付きで削除できます。 で、この質問すべての3つの解決策を示しています。 関数パラメーターとして: template<typename T> struct Check1 { template<typename U = T> U read(typename std::enable_if< std::is_same<U, int>::value >::type* = 0) { return 42; } template<typename U = T> U read(typename std::enable_if< std::is_same<U, double>::value >::type* = 0) { return 3.14; } }; テンプレートパラメータとして: template<typename T> struct Check2 …

6
仮想関数にデフォルトのパラメーターを設定できますか?
基本クラス(またはインターフェイスクラス)を宣言し、そのパラメーターの1つ以上にデフォルト値を指定する場合、派生クラスは同じデフォルトを指定する必要がありますか?そうでない場合、どのデフォルトが派生クラスに現れますか? 補遺:私はまた、これがさまざまなコンパイラでどのように処理されるか、およびこのシナリオでの「推奨される」実践に関する入力に興味があります。
164 c++  c++11  c++03 

11
強く型付けされた列挙型を自動的にintに変換する方法は?
#include <iostream> struct a { enum LOCAL_A { A1, A2 }; }; enum class b { B1, B2 }; int foo(int input) { return input; } int main(void) { std::cout << foo(a::A1) << std::endl; std::cout << foo(static_cast<int>(b::B2)) << std::endl; } の a::LOCAL_Aは、強く型付けされた列挙型が達成しようとしていることですが、小さな違いがあります。通常の列挙型は整数型に変換できますが、強く型付けされた列挙型はキャストなしでは変換できません。 それで、強く型付けされた列挙値をキャストなしで整数型に変換する方法はありますか?はいの場合、どのように?

7
nullptrを使用する利点は何ですか?
このコードは、概念的には3つのポインターに対して同じことを行います(安全なポインター初期化)。 int* p1 = nullptr; int* p2 = NULL; int* p3 = 0; だから、ポインタを割り当てることの利点どのようなものnullptrそれらに値を代入上NULLかは0?
163 c++  c++11  null  c++-faq  nullptr 

3
文字列定数から 'char *'への変換がCでは有効であるがC ++では無効である理由
C ++ 11標準(ISO / IEC 14882:2011)は次のように述べてい§ C.1.1ます。 char* p = "abc"; // valid in C, invalid in C++ C ++の場合、文字列リテラルへのポインタは有害であり、変更しようとするとクラッシュするため、問題ありません。しかし、なぜCでは有効なのでしょうか。 C ++ 11はまた言います: char* p = (char*)"abc"; // OK: cast added つまり、最初のステートメントにキャストが追加された場合、それは有効になります。 キャストによって2番目のステートメントがC ++で有効になるのはなぜですか?それは最初のステートメントとどう違うのですか?まだ有害ではないですか?もしそうなら、なぜ規格はそれが大丈夫だと言ったのですか?
163 c++  c  string  c++11  char 

7
std :: function vsテンプレート
C ++ 11のおかげでstd::function、ファンクターラッパーのファミリーを受け取りました。残念ながら、私はこれらの新しい追加について悪いことだけを聞き続けます。最も人気があるのは、ひどく遅いということです。私はそれをテストしました、そして彼らはテンプレートと比較して本当に吸います。 #include <iostream> #include <functional> #include <string> #include <chrono> template <typename F> float calc1(F f) { return -1.0f * f(3.3f) + 666.0f; } float calc2(std::function<float(float)> f) { return -1.0f * f(3.3f) + 666.0f; } int main() { using namespace std::chrono; const auto tp1 = system_clock::now(); for (int i …

3
std :: moveとstd :: forwardの違いは何ですか
私はここでこれを見ました: 基本クラスのMoveコンストラクターを呼び出すMoveコンストラクター 誰かが説明できますか: 差std::moveとstd::forward、好ましくは、いくつかのコード例をしますか? それを簡単に考える方法、およびいつ使用するか

2
クラスメンバーのスマートポインターの使用
C ++ 11のクラスメンバーとしてのスマートポインターの使用法を理解できません。私はスマートポインターについて多くを読みましたが、私はどのようにunique_ptr、およびshared_ptr/またはweak_ptr一般的に機能するかを理解していると思います。わからないのは本当の使い方です。誰もunique_ptrがほとんどいつも行く方法として使うことを勧めているようです。しかし、私はこのようなものをどのように実装しますか: class Device { }; class Settings { Device *device; public: Settings(Device *device) { this->device = device; } Device *getDevice() { return device; } }; int main() { Device *device = new Device(); Settings settings(device); // ... Device *myDevice = settings.getDevice(); // do something with myDevice... } ポインタをスマートポインタに置き換えたいとしましょう。のunique_ptrためにA …


6
ラムダでキャプチャを移動
C ++ 11ラムダで移動(右辺値参照とも呼ばれます)でキャプチャするにはどうすればよいですか? 私はこのようなものを書こうとしています: std::unique_ptr<int> myPointer(new int); std::function<void(void)> example = [std::move(myPointer)]{ *myPointer = 4; };

7
std :: enable_ifでメンバー関数を条件付きでコンパイル
簡単な例を使って、使い方を理解しようとしていますstd::enable_if。この回答を読んだ後、簡単な例を考え出すのはそれほど難しくないと思いました。std::enable_if2つのメンバー関数から選択して、そのうちの1つだけを使用できるようにしたい。 残念ながら、以下はgcc 4.7でコンパイルできません。何時間も試行した後、私の間違いは何ですかと皆さんに尋ねています。 #include <utility> #include <iostream> template< class T > class Y { public: template < typename = typename std::enable_if< true >::type > T foo() { return 10; } template < typename = typename std::enable_if< false >::type > T foo() { return 10; } }; int main() { Y< …
156 c++  templates  g++  c++11 

3
std :: forwardを使用して引数を転送するのはいつですか?
C ++ 0xは、次の使用例を示していますstd::forward。 template<class T> void foo(T&& arg) { bar(std::forward<T>(arg)); } いつ使用すると有利std::forwardですか? また、&&パラメーター宣言で使用する必要がありますが、すべての場合に有効ですか?関数がその中で宣言さ&&れている場合、関数に一時変数を渡す必要があると思ったので、任意のパラメーターでfooを呼び出すことができますか? 最後に、次のような関数呼び出しがある場合: template<int val, typename... Params> void doSomething(Params... args) { doSomethingElse<val, Params...>(args...); } 代わりにこれを使用する必要があります: template<int val, typename... Params> void doSomething(Params&&... args) { doSomethingElse<val, Params...>(std::forward<Params>(args)...); } また、関数でパラメータを2回使用する場合、つまり2つの関数に同時に転送する場合、使用するのが賢明std::forwardですか?しませんstd::forwardメモリを移動し、二回の一時的に同じことを変換し、それが二次利用のために無効にしますか?次のコードは大丈夫でしょうか: template<int val, typename... Params> void doSomething(Params&&... args) { doSomethingElse<val, Params...>(std::forward<Params>(args)...); doSomethingWeird<val, Params...>(std::forward<Params>(args)...); …

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