問題タブ [c++98]
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++ - ={} 構文で構造体を初期化するとき、内部で何が起こっているのでしょうか?
editコメントに基づいて少し微調整された例
ちょっとしたコードと質問 (明確にするために、これは C++ の質問です):
ここにいくつかの質問があります:
MyStruct1
のインスタンスをその方法で初期化できるようにする魔法は何ですか- c++98 でこれに対する回避策はありますか?
参考までに、スタックに割り当てられた構造体を強制的にゼロ初期化する手段としてコンストラクターを使用しようとしていますが、このスタイルの初期化を禁止したくありません。
c++ - このパターンは C++ で機能しますか?
プロジェクトで PREfast 静的コード分析を実行していますが、次のパターンで C6001 'using uninitialized memory' エラーが発生します。
私が利用しようとしているトリックは、select_image のスコープを if-expression だけに許可することです (つまり、if (条件) { expression-block = 条件変数の有効期間 })。
VS はかなり長い間、問題なくコンパイル (およびおそらくこれを実行) してきました。私は長い間このようなコードをステップ実行していませんでしたが、私が知る限り、select_image の演算子 bool() が true を返す場合にのみ if ブロックに入り、if ブロックを終了すると select_image のインスタンスを破棄します。
PREfast は間違っていますか? または、上記のコードと仮定が正しくない微妙なものがありますか?
c++ - std::map にキャッシュされたアイテムへのポインターを返す
キャッシュとして機能するクラスがあります。次のプライベート メンバーがあります。
キャッシュに格納されている Foo オブジェクトへの参照、ポインター、イテレーター、またはスマート ポインターを返す、このキャッシュのゲッターを作成する必要があります。必要に応じて、getter を介してクライアントが Foo オブジェクトを更新できるようにします。
ただし、アイテムがキャッシュに見つからない場合、ゲッターがスローすることは望ましくありません。代わりに、クライアントは返された値をテストして、アイテムが見つかったかどうかを判断する必要があります。ただし、このアプローチをお勧めする場合は、投げることを確信できます。
私のゲッターにどの戻り値の型をお勧めしますか?
ブーストと C++98 を使用しています。
c++ - std::vector を初期化する> boost::assign::list_of で
boost::assign::list_of を使用して値を type のオブジェクトに入れるにはどうすればよいstd::vector<std::vector<int> >
ですか? または、単体テストの目的でどのように入力できるかについて、他に何か提案はありますか?
更新しました
gcc 4.4.2 で次のコンパイラ エラーが発生します。
これが私のコードです:
c++ - boost::assign::list_of を使用して std::vector を構築するときのあいまいさ
このコード:
エラーが発生します:
gcc 4.4.2 用にコンパイルした場合。
どうすればこの問題を解決できますか? 最終的に、私は以下をコンパイルしようとしています:
これは同じ理由で失敗します。
私のアプリケーションには、単体テストの目的でデータ構造を設定することが含まれます。多くの push_backs などを行う必要があるのではなく、初期化を明確にしたい.
アップデート:
ここに修正があります:
これはとても醜いです。これを明確にするために私は何ができるでしょうか。私の単体テストはヘッダー ファイルのみに記述されているため、使用しませんusing namespace
。
c++ - 一連の値を返すためのインターフェース
数値を取り、その数まで返す関数があります (たとえば、int)。最もクリーンなインターフェースは何ですか? いくつかの考え:
- を返します
vector<int>
。ベクターは数回コピーされるため、非効率的です。 - を返します
vector<int>*
。私のゲッターは、要素だけでなくベクター自体も割り当てる必要があります。誰がベクトルを解放しなければならないかという通常の問題がすべてあります。一度割り当てて、getter へのさまざまな呼び出しに同じストレージを使用することはできないという事実などです。これが、STL アルゴリズムが通常、メモリの割り当てを避け、代わりにそれは通過しました。 - を返します
unique_ptr<vector<int>>
。誰がそれを削除したかは明らかですが、まだ他の問題があります。 - a
vector<int>
を参照パラメーターとして使用します。ゲッター缶push_back()
と呼び出し元はreserve()
、スペースにするかどうかを決定できます。しかし、渡されたものvector
が空でない場合、getter は何をすべきでしょうか? 追加しますか?最初にクリアして上書きしますか?空だと主張しますか?関数のシグネチャが単一の解釈のみを許可しているとよいでしょう。 begin
andend
イテレータを渡します。次に、実際に書き込まれたアイテムの数を返す必要があります (これは、必要な数よりも少ない可能性があります)。呼び出し元は、書き込まれたことのないアイテムにアクセスしないように注意する必要があります。- ゲッターに を取得させ
iterator
、呼び出し元は を渡すことができinsert_iterator
ます。 - あきらめて、単に a を渡します
char *
。:)
c++ - C++11 Exception のデストラクタは今すぐスローできますか?
virtual ~exception() throw() がC++ 98にあるのに、virtual ~exception() がC++ 11にある理由は何ですか?
C++11 がクラスのデストラクタをスローできるようにする設計上の決定は何exception
ですか?
ここから:
c++98:
c++11:
c++ - 前方宣言と shared_ptr
多くのヘッダーを含める代わりに前方宣言を使用するように、コードをリファクタリングしようとしています。私はこれが初めてで、boost::shared_ptr に関して質問があります。
次のインターフェースがあるとします。
次に、 IStarterPtr オブジェクトを引数として取る別のクラスに関数があります。
IStarter.h を含めずに IStarterPtr を前方宣言するにはどうすればよいですか?
関連性がある場合は、C++98 を使用しています。