問題タブ [c++03]

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.

0 投票する
5 に答える
1879 参照

c++ - c++03: std::map の組み込み型のデフォルト コンストラクター

私はいつも次のコードだと思っていました

マップ内で単位化された値が作成されるため、ランダムな値が出力されます。ただし、作成された int は実際には常にゼロに初期化され、標準の組み込み型も特定の状況でゼロに初期化されることが判明しました。

問題は、標準型 (int/char/float/double/size_t) のゼロ初期化がいつ実行されるかです。int i;どこかで宣言すると、ランダムなデータが含まれることは間違いありません。

PS 質問は C++03 標準に関するものです。質問の理由は、int/float/size_t などの組み込み型の初期化をいつ提供する必要があるか、またはいつ安全に省略できるかがわからなくなったためです

0 投票する
3 に答える
486 参照

c++ - std :: string :: operator []の結果のアドレスは、書き込み可能なヌル終了バッファを指していますか?

const char *を受け入れ、関数ProcessStringを使用する関数を変更しています。ProcessStringは、nullで終了する文字バッファーをchar*として予期する関数です。以下の関数シグネチャで定義されているように、バッファ内の文字は変更される場合と変更されない場合があります。「ギャップを埋める」ために、一時的なstd :: string:を使用しています。

私の主な質問は、std :: string :: operator []の保証と、上記の&temp[0]によって返されるアドレスがchar*として使用可能なnullで終了するバッファーであるかどうかについてです。第二に、そして非常に第二に、これを行うためのより良い方法はありますか?

私はC++03を使用しています。

0 投票する
1 に答える
132 参照

c++ - プロキシ オブジェクトで mem_fun_ref を使用する

std::mem_fun_refプロキシを介してメンバー関数を呼び出すために (はい、廃止されたバージョン。理由は以下) を使用しようとしています。

std::mem_fnこれは C++11ではうまく機能しboost::mem_fnますが、boost::mem_fn. 使用できれば問題ありませんがdecltype、コードが C++03 と互換性がある必要があるため使用できません。

これを回避する最も簡単な方法は何ですか? カスタム mem_fun_through_proxy

編集:もう1つの注意点は、proxyクラスを変更できないことです。

0 投票する
2 に答える
679 参照

c++ - C++03でオーバーライドを定義することは合法ですか

多くのC++11機能を使用しているプロジェクトがあり、C++03でコンパイルするためにこのトリックについて考えました。

私の知る限り、C ++キーワードを定義することは禁じられていますが、これは合法ですか?

0 投票する
1 に答える
68 参照

c++ - 基本クラスにキャストされたアイテムのインスタンスへのshared_pointersのリストを持つアイテムを別のリストにソートするためのキャストオプションは何ですか?

基本クラスgreenとそのような階層ツリーがあるとします:

ここに画像の説明を入力

のように見えるすべてのクラスなどでgreenList満たされたリストがあります。このリストは、データが入っているので作成しません。などのクラスのリストを作成します。etc クラスのヘッダーはありますが、クラス内には入れたくありません。redbluegreenredyellowredgetTypegreen

そのリストをC ++ 03で(ブーストを使用して)などのリストgreenListにソートする方法は?redListyellowList

0 投票する
4 に答える
204 参照

c++ - ここで呼び出されるコンストラクターはどれですか?

このコードフラグメントでは、実際にどのコンストラクターが呼び出されますか?

ベクターには、コピーコンストラクター、デフォルトコンストラクター、および代入演算子があります。

getVectorは値で戻ります。

コードはC++03標準を使用します。

コードフラグメントは、デフォルトコンストラクターを呼び出してから代入演算子を呼び出すことになっているように見えますが、この宣言はコピーコンストラクターを使用する別の形式であると思われます。どちらが正しい?

0 投票する
1 に答える
105 参照

c++ - new obj() を作成するときに基本クラス コンストラクタ new base(argT argV) を呼び出す方法は?

だから私はbaseコンストラクターを持つクラスを持っています(T V). 次のようなものを作成したいobjコンストラクターを持つクラスを継承しました()

T val;しかし、C++ でobj ベース コンストラクター値に渡す方法は?

0 投票する
2 に答える
10794 参照

c++ - C++03 と C++11 の両方をサポートするために nullptr を定義する方法は?

重複の可能性:
nullptr を C++-pre-C++0x プログラムに「バックポート」する

nullptrC++03 と C++11 の両方をサポートするための定義方法は?

以下のコードは、C++11 コンパイラの nullptr の意味を変更せずに、C++03 と C++11 の両方のコンパイルでコンパイルされますか?

0 投票する
1 に答える
2276 参照

c++ - 「ブレーク」を使用すると、BOOST_FOREACH は無限ループに入りますか?

次のコード セグメントは、 BOOST_FOREACHステートメント内で無限ループに入りますが、その理由がわかりません。Boost のドキュメントからわかる限り、BOOST_FOREACHループ内で「break」を使用しても問題ありません。ここで何がうまくいかないのでしょうか?

BOOST_FOREACHループを for ループ (イテレータ from sectors.begin()to を使用)に置き換えると、sectors.end()問題なく動作します (無限ループはありません)。

バージョンと追加情報:

  • ブースト: 1.40.0
  • gcc: 4.1.2
  • アーキテクチャ: x86_64
  • この動作はリリース ビルドでのみ発生します。デバッグ ビルドを実行すると、期待どおりに動作します。
  • Visual Studio でコンパイルすると、期待どおりに動作します。つまり、無限ループはありません。

mkb の質問に答えて、実行すると次のようになりますgcc -E

この展開の注目すべき機能の 1 つは、ネストされた 2 つの for ループがあることです。内側のループと外側のループで何が起こっているのかを理解することはできませんが、(Davidが示唆しているように)内側のループだけから抜け出し、BOOST_FOREACHが一部の人にとってそれを適切に処理していない可能性はありますか理由?

0 投票する
3 に答える
1875 参照

c++ - C++ 標準のどのバージョンで "(i+=10)+=10" が未定義の動作をしますか?

C++ では、次の動作は未定義ですか。

What's the result of += in C and C++?への私の回答に対するコメントで、これについていくつかの議論がありました。ここでの微妙な点は、デフォルトの応答が「はい」のように見えるのに対し、正しい答えは「C++ 標準のバージョンに依存する」であるように見えることです。

標準のバージョンに依存する場合は、どこが UB でどこがそうでないかを説明してください。