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

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

7
C ++では、関数からベクトルを返すことはまだ悪い習慣ですか?
短いバージョン:多くのプログラミング言語では、ベクトルや配列などの大きなオブジェクトを返すのが一般的です。クラスにmoveコンストラクターがある場合、このスタイルはC ++ 0xで受け入れられるのですか、それともC ++プログラマーは奇妙/醜い/退屈であると考えていますか? 長いバージョン: C ++ 0xでは、これはまだ悪い形式と見なされていますか? std::vector<std::string> BuildLargeVector(); ... std::vector<std::string> v = BuildLargeVector(); 従来のバージョンは次のようになります。 void BuildLargeVector(std::vector<std::string>& result); ... std::vector<std::string> v; BuildLargeVector(v); 新しいバージョンでBuildLargeVectorは、から返される値は右辺値であるためstd::vector、(N)RVOが発生しないと仮定すると、vはの移動コンストラクタを使用して構築されます。 C ++ 0xの前でさえ、(N)RVOのために最初の形式はしばしば「効率的」でした。ただし、(N)RVOはコンパイラーの裁量に任されています。これで右辺値参照ができたので、ディープコピーが行われないことが保証されます。 編集:質問は本当に最適化についてではありません。示されている両方の形式は、実際のプログラムでほぼ同一のパフォーマンスを持っています。一方、最初の形式では、パフォーマンスが大幅に低下する可能性がありました。その結果、最初の形式は、長い間C ++プログラミングの主要なコードのにおいでした。もういいんじゃないの?

2
C ++ 11での乱数生成:生成方法、その仕組み [閉まっている]
ここで何が尋ねられているのかを知るのは難しい。この質問は、あいまいで、あいまいで、不完全で、過度に広い、または修辞的であり、現在の形では合理的に回答することができません。再開できるようにこの質問を明確にするヘルプについては、ヘルプセンターに アクセスしてください。 8年前に閉鎖。 私は最近C ++ 11で乱数を生成する新しい方法に出くわしましたが、それについて読んだ論文を要約することができませんでした(「エンジン」、「分布」のような数学用語、「生成されたすべての整数が等しく可能性がある」)。 だから誰でも説明できますか 彼らは何ですか? 彼らはどういう意味ですか? 生成する方法? 彼らはどのように機能しますか? 等 乱数生成に関する1つのFAQですべてを呼び出すことができます。
102 c++  c++11  random 

2
値によるC ++ 0xラムダキャプチャは常にconst?
値でキャプチャし、キャプチャした値を非定数にする方法はありますか?ライブラリのファンクターがあり、const以外のメソッドをキャプチャして呼び出したいのですが、constにする必要があります。 以下はコンパイルされませんが、foo :: operator()constを作成すると修正されます。 struct foo { bool operator () ( const bool & a ) { return a; } }; int _tmain(int argc, _TCHAR* argv[]) { foo afoo; auto bar = [=] () -> bool { afoo(true); }; return 0; }
102 c++  lambda  const  c++11 

6
STLコンテナをフィルタリングする最新の方法は?
何年にもわたるC#の後でC ++に戻ると、配列をフィルタリングする最新の-読み取り:C ++ 11-方法はどうなるのか、つまり、このLinqクエリに似たものをどのように実現できるのか疑問に思いました。 var filteredElements = elements.Where(elm => elm.filterProperty == true); 要素のベクトルをフィルタリングするために(stringsこの質問のために)? 明示的なメソッドを定義boost::filter_iteratorする必要がある古いSTLスタイルのアルゴリズム(またはのような拡張機能)が今では置き換えられることを心から願っていますか?
102 c++  c++11  stl 

3
正規表現についてgcc 4.8以前のバグがありますか?
C ++ 11のコードでstd :: regexを使用しようとしていますが、サポートに少しバグがあるようです。例: #include <regex> #include <iostream> int main (int argc, const char * argv[]) { std::regex r("st|mt|tr"); std::cerr << "st|mt|tr" << " matches st? " << std::regex_match("st", r) << std::endl; std::cerr << "st|mt|tr" << " matches mt? " << std::regex_match("mt", r) << std::endl; std::cerr << "st|mt|tr" << …
101 c++  regex  gcc  c++11  libstdc++ 

8
範囲ベースのforループで使用するC ++ 11の範囲クラスはありますか?
私は少し前にこれを書いていることに気づきました: template <long int T_begin, long int T_end> class range_class { public: class iterator { friend class range_class; public: long int operator *() const { return i_; } const iterator &operator ++() { ++i_; return *this; } iterator operator ++(int) { iterator copy(*this); ++i_; return copy; } bool operator ==(const …
101 c++  c++11  std 

13
C ++で自律型の `self`メンバー型を実装できますか?
C ++には、囲んでいるクラスのタイプに評価されるPHPのselfキーワードに相当するものがありません。 クラスごとにそれを偽造するのは十分簡単です: struct Foo { typedef Foo self; }; しかし、私はFoo再び書く必要がありました。多分私はいつかこれを間違えてサイレントバグを引き起こすでしょう。 とのいくつかの組み合わせを使用decltypeして、この作業を「自律的に」行うことはできますか?私はすでに以下を試しましたがthis、その場所では無効です: struct Foo { typedef decltype(*this) self; }; // main.cpp:3:22: error: invalid use of 'this' at top level // typedef decltype(*this) self; (私はと同等ですstaticが、同じことを行いますが、遅延バインディングについては心配しません。)
101 c++  c++11 

3
順序付けされていないコンテナでユーザー定義型のstd :: hash <Key> :: operator()を特化する方法は?
で、ユーザー定義のキータイプをサポートするために、std::unordered_set&lt;Key&gt;そしてstd::unordered_map&lt;Key, Value&gt; 一つが提供しなければならないoperator==(Key, Key)とハッシュファンクタ: struct X { int id; /* ... */ }; bool operator==(X a, X b) { return a.id == b.id; } struct MyHash { size_t operator()(const X&amp; x) const { return std::hash&lt;int&gt;()(x.id); } }; std::unordered_set&lt;X, MyHash&gt; s; コンパイラとライブラリに付属する型の場合のように、typeのデフォルトのハッシュだけstd::unordered_set&lt;X&gt; で記述する方が便利ですX。相談後 C ++標準ドラフトN3242§20.8.12 [unord.hash]および§17.6.3.4[hash.requirements]、 Boost.Unordered g ++ include\c++\4.7.0\bits\functional_hash.h VC10 …

3
C ++ 03 throw()指定子C ++ 11 noexceptの違い
実行時とコンパイル時にそれぞれチェックされることthrow()とnoexceptそれ以外に違いはありますか? このWikipedia C ++ 11の記事は、C ++ 03スロー指定子が非推奨であることを示唆しています。 なぜそうnoexceptなのか、コンパイル時にそれらすべてをカバーするのに十分な能力があるのですか? [注:この質問とこの記事を確認しましたが、サポート終了の明確な理由を判断できませんでした。]
100 c++  exception  c++11  throw  noexcept 

3
gcc std :: unordered_mapの実装は遅いですか?もしそうなら-なぜですか?
私たちは、C ++で高性能の重要なソフトウェアを開発しています。そこで、並行ハッシュマップが必要で、それを実装しました。そこで、並行ハッシュマップがと比較してどれほど遅いかを把握するためのベンチマークを作成しましたstd::unordered_map。 しかし、std::unordered_map信じられないほど遅いようです...だから、これは私たちのマイクロベンチマークです(並行マップでは、ロックが最適化されないことを確認するために新しいスレッドを生成し、私も0を挿入しないことに注意してくださいgoogle::dense_hash_map。 null値が必要です): boost::random::mt19937 rng; boost::random::uniform_int_distribution&lt;&gt; dist(std::numeric_limits&lt;uint64_t&gt;::min(), std::numeric_limits&lt;uint64_t&gt;::max()); std::vector&lt;uint64_t&gt; vec(SIZE); for (int i = 0; i &lt; SIZE; ++i) { uint64_t val = 0; while (val == 0) { val = dist(rng); } vec[i] = val; } std::unordered_map&lt;int, long double&gt; map; auto begin = std::chrono::high_resolution_clock::now(); for (int i = …

2
std :: result_ofとdecltypeの違い
std::result_ofC ++ 0xでの必要性を理解するのに問題があります。私が正しく理解した場合result_ofは、特定のタイプのパラメーターを持つ関数オブジェクトを呼び出す結果のタイプを取得するために使用されます。例えば: template &lt;typename F, typename Arg&gt; typename std::result_of&lt;F(Arg)&gt;::type invoke(F f, Arg a) { return f(a); } 次のコードとの違いは本当にわかりません。 template &lt;typename F, typename Arg&gt; auto invoke(F f, Arg a) -&gt; decltype(f(a)) //uses the f parameter { return f(a); } または template &lt;typename F, typename Arg&gt; auto invoke(F f, Arg a) …
100 c++  c++11  decltype  result-of 

11
コンパイル時の文字列ハッシュ
C ++ 11の新しい文字列リテラルを使用すると、コンパイル時に文字列のハッシュを計算できる可能性があることをいくつかの場所で読んだことがあります。しかし、誰も出てきて、それが可能であるか、どのように行われるかを言う準備ができていないようです。 これは可能ですか? オペレーターはどのように見えますか? このようなユースケースに特に興味があります。 void foo( const std::string&amp; value ) { switch( std::hash(value) ) { case "one"_hash: one(); break; case "two"_hash: two(); break; /*many more cases*/ default: other(); break; } } 注:コンパイル時のハッシュ関数は、私が書いたとおりに見える必要はありません。最終的なソリューションがどのようになるかを推測するために最善を尽くしましたmeta_hash&lt;"string"_meta&gt;::valueが、実行可能なソリューションになる可能性もあります。

5
C ++の通常のポインターと比較して、スマートポインターのオーバーヘッドはどのくらいですか?
C ++ 11の通常のポインターと比較して、スマートポインターのオーバーヘッドはどのくらいですか?言い換えると、スマートポインターを使用するとコードが遅くなりますか? 具体的には、C ++ 11 std::shared_ptrとについて質問していstd::unique_ptrます。 明らかに、スタックを押し下げたものは大きくなります(少なくとも私はそう思います)。スマートポインターもその内部状態(参照カウントなど)を格納する必要があるため、問題は、実際にはどのくらいになるかです。パフォーマンスに影響がある場合はどうなりますか? たとえば、通常のポインタではなく、関数からスマートポインタを返します。 std::shared_ptr&lt;const Value&gt; getValue(); // versus const Value *getValue(); または、たとえば、関数の1つが通常のポインターの代わりにパラメーターとしてスマートポインターを受け入れる場合: void setValue(std::shared_ptr&lt;const Value&gt; val); // versus void setValue(const Value *val);

7
std :: unique_ptrを関数に渡すにはどうすればよいですか
どうすればstd::unique_ptr関数にを渡すことができますか?次のクラスがあるとしましょう。 class A { public: A(int val) { _val = val; } int GetVal() { return _val; } private: int _val; }; 以下はコンパイルされません。 void MyFunc(unique_ptr&lt;A&gt; arg) { cout &lt;&lt; arg-&gt;GetVal() &lt;&lt; endl; } int main(int argc, char* argv[]) { unique_ptr&lt;A&gt; ptr = unique_ptr&lt;A&gt;(new A(1234)); MyFunc(ptr); return 0; } なぜstd::unique_ptr関数にを渡せないのですか?確かに、これが構成の主な目的ですか?または、C ++委員会は、生のCスタイルのポインターにフォールバックして次のように渡すことを意図していましたか? …
100 c++  c++11  unique-ptr 


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