問題タブ [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.
c++ - 「&s [0]」は、std :: string内の連続する文字を指しますか?
私はいくつかのメンテナンス作業を行っていて、次のようなものに遭遇しました:
&s[0]を使用するのがstd:: vectorの場合は安全だと思いますが、これはstd :: stringの安全な使用ですか?
c++ - std :: basic_stringを使用するのは合理的ですか?C ++ 03をターゲットにする場合、連続したバッファとして?
std::basic_stringC ++ 03では、技術的にはテンプレートに連続したメモリが必要ないことを知っています。ただし、この自由を実際に利用する最新のコンパイラーには、いくつの実装が存在するのか興味があります。たとえば、basic_stringC APIの結果を受け取るために使用したい場合(以下の例のように)、すぐに文字列に変換するためだけにベクトルを割り当てるのはばかげているようです。
例:
このようなコードは、隣接していることを意味するため、移植性がわずかに低下する可能性があることを私は知っstd::wstringていますが、このコードがどれほど移植性が低いのか疑問に思っています。言い換えれば、コンパイラは、非連続メモリが許す自由を実際にどのように利用できるでしょうか。
編集:C++03に言及するためにこの質問を更新しました。basic_string読者は、C ++ 11を対象とする場合、標準では連続している必要があることに注意する必要があります。したがって、その標準を対象とする場合、上記の質問は問題になりません。
c++ - C++ のデフォルトのテンプレート引数
関数テンプレート StrCompare があるとします
今メイン関数で私は行を書きます
デフォルトのテンプレート引数を提供しているので動作するはずですが、
コンパイラは次のエラー
を返しません `StrCompare(char*&, char*&)' の呼び出しに一致する関数はありません。
私が書いたら
コンパイラは同じエラー メッセージを表示します。
c++ - C++03の値
特定のパラメーターがC++03の右辺値であるかどうかをどのように判断できますか?私はいくつかの非常に一般的なコードを書いていますが、可能であれば参照を取得するか、そうでない場合は新しいオブジェクトを作成する必要があります。オーバーロードして値による値と参照による値を取得し、右辺値の戻り値に値による関数を呼び出させることはできますか?
または、これが右辺値参照がC ++ 0xにある理由であるという非常に不快な気持ちがありますか?
編集:
is_rvalue =!(is_reference || is_pointer)?
c++ - 仮想関数にデフォルトのパラメーターを設定できますか?
基本クラス (またはインターフェイス クラス) を宣言し、そのパラメーターの 1 つ以上の既定値を指定する場合、派生クラスは同じ既定値を指定する必要がありますか? そうでない場合、どの既定値が派生クラスで明示されますか?
補遺: また、これがさまざまなコンパイラ間でどのように処理されるか、およびこのシナリオでの「推奨される」プラクティスに関する入力にも興味があります。
c++ - Boostを使用して、常にtrueを返すラムダ関数を作成する
ある形式の述語をとる関数があるとしましょう。
常にtrueを返す述語で呼び出したい場合は、ヘルパー関数を定義できます。
しかし、別の関数を定義せずに(おそらくboost :: lambdaを使用して)この関数を呼び出す方法はありますか?
[編集:言うのを忘れた:私はC++0xを使用できません]
c++ - C++03 での完全転送
この機能があれば
そして、それを呼び出してみてください。次のような右辺値としましょう
T が const int であると推定されず、引数が const int& になり、右辺値にバインド可能になるのはなぜですか?
c++ - C++03とC++11の未定義動作の違いは何ですか?
新しい標準には、古い標準とは異なる未定義の動作があります。たとえば、新しいシーケンスルールは、以前は定義されていなかったいくつかの算術演算(シーケンスポイント間の複数の書き込みなどの理由)が定義されることを意味します。
では、未定義動作について新たに何を学ぶ必要があるのでしょうか。
c++ - C++03 で `std::auto_ptr` のコレクションのようなものを返す最良の方法は何ですか?
std::auto_ptrなどの STL コンテナーに格納することはできませんstd::vector。ただし、ポリモーフィック オブジェクトのコレクションを返す必要がある場合があり、オブジェクトのベクトルを返すことができません (スライシングの問題が原因です)。それらを使用std::tr1::shared_ptrして に貼り付けることができますvectorが、個別の参照カウントを維持するという高い代償を払わなければならず、実際のメモリ (コンテナー) を所有するオブジェクトは、オブジェクトを論理的に "所有" しなくなります。所有権に関係なく。
C++0x は、この問題に対する完璧なソリューションを の形で提供しますstd::vector<std::unique_ptr<t>>が、私は C++0x にアクセスできません。
その他の注意事項:
- C++0x にはアクセスできませんが、TR1 は利用できます。
- Boostの利用は避けたい(他に選択肢がなければ利用可能だが)
boost::ptr_containerコンテナー (つまり)を認識してboost::ptr_vectorいますが、デバッガーが壊れるため、これを避けたいと思います (void *内部は s に格納されているため、コンテナー内に実際に格納されているオブジェクトをデバッガーで表示することは困難です)。
c++ - C ++ 03のfor_eachにメンバー関数を渡す(ブーストなし、c ++ 11なし)
以下の「解決策」はコンパイルされますが、それは私が望むものではありません。putメンバー関数をfor_eachではなくに渡したいのですが*this。ブーストの使用はオプションではありません。これはC++03内で解決できますか?