問題タブ [c++11]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - C++0x の C++ 列挙型の基になる型
enum がどのように機能するかを理解するために、C++ 標準を少し読んでみました。当初考えていたよりも実際にはたくさんあります。
スコープ付き列挙のint
場合、enum-base 句で特に指定しない限り、基になる型が であることは明らかです (任意の整数型にすることができます)。
スコープのない列挙の場合、基になる型は機能する任意の整数型にすることができ、必要な場合を除き、int よりも大きくならないようです。
基になるスコープのない列挙型は標準化されていないため、インスタンスのシリアル化を処理する最良の方法は何ですか? これまでのところ、int
書き込み時に に変換してから にシリアル化し、読み取り時に変数をスイッチにint
設定してenum
いましたが、少しぎこちないようです。より良い方法はありますか?
c++ - 新しい標準または古い標準(仕様)に基づいてC ++を学ぶ必要がありますか?
OK、私は今後数ヶ月でc ++開発に入るのを考えています(決まった日付はありません)。私は言語(主にC)と、OO、MI、テンプレート、例外、パターン、使用されるSTLのいくつかの基本に漠然と精通しています。そして今、私は言語を深く習得したい時点にいます。そして、当然の問題は、現在のC++03標準とC++0x
標準のどちら
から始めるべきかということです。
新しい標準がほぼここにあり、今後何年も続く可能性があることを考えると、ユーザーから教祖に移行するための最良の方法を提案してください。
ありがとう
c++ - C++0x の新しい Unicode 文字
utf8、utf16、utf32、wchar_t (OS によっては utf32 または utf16) など、さまざまなエンコーディングで文字列を取得できる API を構築しています。
新しい C++ 標準では新しい型が導入されて
char16_t
おりchar32_t
、この sizeof あいまいさがなく、将来使用する必要があるため、それらもサポートしたいと思いますが、問題は、オーバーロードを許可しない通常の, ,型と干渉するかどうかです。同じタイプを参照できますか?uint16_t
uint32_t
wchar_t
だから私はただ書くことができます:
/li>今日の typedef とは何ですか
std::basic_string<char16_t>
:std::basic_string<char32_t>
参照が見つかりません。
編集: gcc-4.4 のヘッダーによると、これらの新しいタイプが導入されました:
これが実際の標準要件であり、gcc-ism ではないことを確認したいだけです。
c++ - ブースト順不同マップとセットの最適化、C++
60GB のテキストを解析し、マップで多くの挿入と検索を行います。私はboost::unordered_setとboost::unordered_mapを使い始めたばかりで、私のプログラムがこれらのコンテナに詰め込み始めると、コンテナはどんどん大きくなり始め、これらのコンテナにメモリを事前に割り当てるのが良い考えかどうか疑問に思っていました. mymap::get_allocator().allocate(N); のようなもの ?
それとも、それらをそのままにして、成長因子を自分で割り当てて把握する必要がありますか? コードは次のようになります
前もって感謝します
c++ - C++0x初期化子リストの例
この既存のコードの例で、C++0x初期化子リスト機能をどのように利用できるかを確認したいと思います。
例0:
次のようなものをサポートしますか?
例1:
または、このようなリテラルが必要ですか?:
例2:
もしそうなら、AskStringとAskの違いはどのように処理されますか?
c++ - C ++ 0xを使い始めましたか?
ほとんどのコンパイラはすでにC++0xをサポートしています。C ++ 0xを使い始めましたか、それともxの定義を待っていますか?コードのリファクタリングを行う必要があります。新機能の使用を開始する必要がありますか?
c++ - unique_ptr - 大幅な改善?
実際の C++ 標準では、次の規則を満たすコレクションを作成することは、不可能ではないにしても困難です。
- 例外安全性、
- 安価な内部操作 (実際の STL コンテナーでは、操作はコピーです)、
- 自動メモリ管理。
(1) を満たすために、コレクションは生のポインターを格納できません。(2) を満たすには、コレクションは生のポインターを格納する必要があります。(3) を満たすために、コレクションは値によってオブジェクトを格納する必要があります。
結論:3つの項目は互いに矛盾しています。
shared_ptr
コレクションが要素を移動する必要がある場合、コンストラクタとデストラクタの 2 つの呼び出しを行う必要があるため、項目 (2) は s が使用されている場合には満たされません。のような大規模memcpy()
なコピー/移動操作はできません。
unique_ptr
説明されている問題はとによって解決されるというのは正しいstd::move()
ですか? ツールを使用するコレクションは、次の 3 つの条件すべてを満たすことができます。
- 例外の副作用としてコレクションが削除されると、
unique_ptr
のデストラクタが呼び出されます。メモリリークなし。 unique_ptr
参照カウンター用の余分なスペースは必要ありません。したがって、その本体は、ラップされたポインターとまったく同じサイズである必要があります。- よくわかりませんが、これにより、同様の操作(?)
unique_ptrs
を使用してのグループを移動できるように見えますが、memmove()
- それが不可能な場合でも、
std::move()
オペレーターはunique_ptr
、コンストラクター/デストラクターのペアの呼び出しを行わずに各オブジェクトを移動できます。
unique_ptr
指定されたメモリの排他的所有権を持ちます。偶発的なメモリ リークは発生しません。
これは本当ですか?を使用するその他の利点は何unique_ptr
ですか?
c++ - C++ クラス共通文字列定数
C++ では、クラス内で使用されるいくつかの文字列を定義したいと思いますが、値はすべてのインスタンスで共通になります。CI では s を使用していたでしょう#define
。これがその試みです:
C++0x が必要な場合、それは許容されます。
c++ - C++0x のパフォーマンスの向上
より効率的な C++ コードを記述できるようにする C++0x の改善点の 1 つは、unique_ptr スマート ポインターです (残念ながら、memmove() のような操作を介して移動することはできません: 提案はドラフトに含まれていませんでした)。
今後の標準でのその他のパフォーマンスの改善点は何ですか? 次のコードを例にとります。
このコードは、ベクトルvに含まれるすべての文字列を連結します。このきちんとしたコードの問題は、accumulate() がコピーを行い、参照を使用しないことです。また、プラス演算子が呼び出されるたびに string() が再割り当てされます。したがって、このコードは、適切に最適化された類似の C コードに比べてパフォーマンスが低下します。
C++0x は問題を解決するためのツールを提供していますか?
c++ - 今後の C++0x のコンパイラ サポート
新しい C++0x を適切にサポートするコンパイラはありますか?
私は GCC を使用していますが、残念ながら現在のバージョン 4.4 では新機能のサポートが不十分です。