問題タブ [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++ - C ++ 11の演算子モジュロ変更?
重複の可能性:
C++ 演算子 % 保証
C++ 98/03 で
5.6-4
二項 / 演算子は商を生成し、二項 % 演算子は最初の式を 2 番目の式で割った剰余を生成します。/ または % の 2 番目のオペランドがゼロの場合、動作は未定義です。それ以外の場合、(a/b)*b + a%b は a に等しくなります。両方のオペランドが負でない場合、残りは負ではありません。そうでない場合、剰余の符号は実装定義です。
C++ 11 の場合:
5.6 -4
二項 / 演算子は商を生成し、二項 % 演算子は最初の式を 2 番目の式で割った剰余を生成します。/ または % の 2 番目のオペランドがゼロの場合、動作は未定義です。整数オペランドの場合、/ 演算子は小数部分を破棄した代数商を生成します。81 商 a/b が結果の型で表現できる場合、(a/b)*b + a%b は a に等しくなります。
符号ビットの実装定義が欠落していることがわかるように、それはどうなりますか?
c++ - isSet() または演算子 void*() または明示的な演算子 bool() または何か他のもの?
値が設定されているかどうかをチェックする関数の最新技術は何ですか?
たとえば、以下の反復子はセルを解析します。一部のセルには値が含まれており、他のセルは空です。
最も便利な方法は何ですか?
反射:
- 私の上司は理解していない
isset()
=> に改名isSet()
empty()
単一のセルだけでなく、コンテナー コレクションに関するものです :(operator void*
論理的な方法のようですが、C++11 ストリームでは非推奨ですexplicit operator
はまだサポートされていません(私のコードは古いコンパイラに準拠している必要があります)
私は読んでいます:
c++ - テンプレートタイプのマクロ引数の括弧と可変個引数マクロを使用できません
重複の可能性:
マクロで使用されるテンプレートパラメータの問題
の構造を変更せずにこれを機能させる方法を見つけようとしていますINHERIT
:
問題は、の呼び出しにINHERIT
コンマが含まれていることです。
古いコンパイラをサポートしようとしているので、可変個引数のマクロとテンプレートエイリアスはオプションではありません。これを修正する方法はありますか?
c++ - クラスのプライベートメンバー変数であるコンテナを初期化します
私はlist<string> myList
自分のクラスのプライベート属性としてを持っています。このリストの内容はコンパイル時に既知であり、一定です。その値を初期化するためのコンパクトな方法(C ++ 03)はありますか?私はこれだけを考えることができます:
私はこのようなものが欲しいです:
c++ - C++03 で文字列を int に変換する
重複の可能性:
C++ で文字列を int に解析する方法は?
C++03 で string を int に変換する方法は多数あります。これまでに見つけた最高のものはこれです:
このソリューションの問題点は、「12monkeys」を受け入れて、躊躇なく 12 に変換することです。この場合、これを確認して「変換に失敗しました」と出力する簡単な方法はありますか?
atoi()、atol()、および strtol() を試してみましたが、失敗した場合に 0 を返すという事実は無駄です。文字列が「0」ではないかどうかを知るにはどうすればよいですか? 範囲チェックもありません (strtol() を除く)。「12monkeys」の問題は言うまでもなく、そこにも存在します。
c++ - 別のC++環境でDLLを作成する
メインソリューションにリンクされているDLLをターゲットにしたライブラリを構築しています。
この新しいDLLは非常に複雑で、C ++ 11の機能を利用したいのですが、それをリンクするプログラムは確実に利用しません。実際、メインプログラムは現在、VS2008とVS2010を使用して「クリーンに」構築されています(Linux用のGCC 4.3だと思いますか?)。
私が提案するもの:
VS2012をIDEとして使用し、IntelC++コンパイラ2013を使用して.dll/.so(Linuxの場合)にコンパイルします。これは、私が理解しているように、基本的にマシン形式(.exeなど)に依存します。
私はC++を使用して問題を解決することに精通していますが、コンパイル/リンクなどの基本に精通していません。したがって、コミュニティに質問したいと思います。
- これは可能です
- 可能であれば、それはどれほど簡単ですか(私が説明したように単純ですか?)/途中でどのような落とし穴や問題が予想されますか(それは価値がありますか)?
私が予想する懸念事項:
- ランタイムライブラリ-これがこの取り組みを妨げる要因になると思います。問題になるかもしれないことを除いて、私はそれらについて/それらがどのように機能するかについて何も知りません。
- 標準ライブラリの実装の違い-DLL形式であるかどうかは重要ですか?
- スレッドの競合-dllスレッドとメインプログラムスレッドが同じデータを変更することはなく、実際にはメインプログラムのスレッドの1つがDLL関数を呼び出します。
ボーナス:上記は私がとることを期待しているルートですが、理想的には、このコードをインテリセンス、一般的な表示などのために開いておく必要があります(基本的にはメインソリューションのプロジェクトになるためです)。別のランタイムライブラリ/コンパイラを指定する方法はありますか?これはできますか?
編集:このボーナス部分の主な理由は、メインプログラムとこのライブラリが別々に構築されている場合に発生する必要な「バージョン管理」の競合を排除することです。
注:私は新しいためだけにC ++ 11を使用していません-強く型付けされた列挙型とクロスプラットフォームのスレッデッドコードは、ライブラリにとって大きなボーナスになります。
c++ - const_casting は可変フィールドで安全ですか?
次の C++03 プログラムを検討してください。
動作しているように見えますが、安全ですか?
フィールドを変更しているだけですmutable
が、そのコンテキストを完全に取り除いてconst
しまうと緊張します。
c++ - C++03 で const かどうかを確認する
オブジェクトが C++11 なしで const かどうかを確認するにはどうすればよいstd::is_const
ですか? 私の知る限り、constと宣言されconst_cast
たオブジェクトを ingすべきではありません
c++ - std::ofstreamのオープンモードを変更または確認します
を使用して多くのファイルI/Oを実行する一部のコードでは、std::ofstream
効率を上げるためにストリームをキャッシュしています。ただし、ファイルのオープンモードを変更する必要がある場合があります(たとえば、追加と切り捨て)。同様のモックコードを次に示します。
誰かが知っていますか:
ofstream
?のオープンモードを変更する方法があります。- そうでない場合は、の現在
openmode
が何であるかを確認して、ofstream
必要な場合にのみ閉じて再度開くことができるようにする方法はありますか?
c++ - フレンドクラスを使用したシングルトン実装(C ++)
シングルトンを作成しようとしたときに、これを思いつきました。例:(MySelf
スレッドセーフで、ダブルチェックロックを使用しないシングルトンを作成しようとしています)
今、私はそれを次のように簡単に使用できます、
私が作成しようとしているクラスは最初から最後までそこにあるので、私は怠惰な初期化を望んでいません。しかし、このスレッドは安全ですか?(私の知る限り、それは大丈夫のようです)
これで問題がなければ、このようなジェネリックプログラミングを使用しますか?
だから私はこれを他のクラスでも使うことができます。必要なシグルトンに追加friend class GenericSingleton<MySelf>;
する必要があります(たとえば、MySelfクラスに追加する必要があります)。
この実装は問題を引き起こす可能性がありますか?私は実際にライブラリを作成しています。一部のシングルトンはエクスポートされ、一部はエクスポートされません。また、これがライブラリではなく、別のアプリケーション用である場合はどうなりますか?
- 編集 -
だから今私はこのようにする必要があります(私はまだC ++11をサポートしていないVC++を使用しているので)、
そして、関数を1回使用し、その後使用するためにキャッシュするようにユーザーに指示します。(または、関数の名前を変更して、Initialize()
ロックや作成なしで参照を返すための別のメソッドを作成することもできます。)では、どこにあるmymutex
べきですか?どこで初期化する必要がありますか?