タグ付けされた質問 「c++」

静的に型付けされた自由形式のマルチパラダイムでコンパイルされた汎用プログラミング言語であるC ++に関する質問。

2
ビットごとのORとフラグの追加
私は他の人がビットワイズORを使用してフラグを結合する前に見ました: #define RUN 0x01 #define JUMP 0x02 #define SHOOT 0x04 const byte madPerson = RUN | JUMP | SHOOT; それも私がやる方法です。 しかし、追加を使用してフラグを結合する(あまり多くない)ものも見ました: #define RUN 0x01 #define JUMP 0x02 #define SHOOT 0x04 const byte madPerson = RUN + JUMP + SHOOT; どちらが「読みやすい」のですか?(より多くの人が認識すると思いますか?)それを行う「標準的な」方法は何ですか?あなたはどちらを好みますか?
16 c++  operators 

2
std :: bitsetよりもcスタイルのビット操作には利点がありますか?
私はほとんどC ++ 11/14でのみ動作しますが、通常、次のようなコードが表示されたときはうんざりします。 std::int64_t mArray; mArray |= someMask << 1; これは単なる例です。私は一般的にビット単位の操作について話しています。C ++では、本当にポイントがありますか?上記は心をゆがめ、エラーを起こしやすいですが、を使用すると次のstd::bitsetことができます: より簡単にサイズを変更します std::bitset必要に応じてテンプレートパラメータを調整し、実装に残りの処理を任せることで、ます。 何が起こっているかを考え出す(そして間違いを犯す可能性がある)時間を短縮std::bitsetし、同様の方法で、std::arrayまたは他のデータコンテナーに書き込みます。 私の質問は 下位互換性以外に、プリミティブ型を使用しない理由はありますstd::bitsetか?

6
単一の実行可能ファイルを開発するときに、異なるC ++コンパイラと言語バージョンを使用する
当社は、衛星通信用の大きくて非常に複雑なソースコードを購入します。 これはC ++でコーディングされており、C ++でもコードに追加をコーディングし、購入したコードとコードを単一の実行可能ユニットにリンクします。 購入したコードの開発に使用したのと同じコンパイラーおよび同じコンパイラーのバージョンを使用する必要がありますか? 購入したコードと同じバージョンのC ++を使用する必要がありますか?それは2014を使用していない場合、我々は_might_それのいくつかの機能を使用したいのですが、異なるバージョンを混合しながらいくつかの問題があるかもしれないではない場合。 理論上はもちろん、特に言語バージョンは重要ではありませんが、コンパイラのバージョンが異なると異なるオブジェクトコードが生成され、タイミングの違いなどが発生する可能性が考えられます。 何に注意する必要がありますか?
15 c++ 

4
サイズ、インデックスなどの場合はsize_tまたはint
C ++では、size_t(または、より正確にはT::size_type「通常」であるsize_t、すなわち、unsignedタイプ)の戻り値として使用されsize()、引数operator[]等、(参照std::vector、ら。)。 一方、.NET言語は同じ目的でint(および、オプションでlong)を使用します。実際、CLS準拠の言語は、符号なしの型をサポートする必要はありません。 .NETがC ++よりも新しいことを考えると、配列インデックスや長さのように「おそらく」負になれないものでも使用に問題があるかもしれunsigned intないということがわかります。後方互換性のためのC ++アプローチは「歴史的なアーティファクト」ですか?または、2つのアプローチの間に実際の重要な設計上のトレードオフがありますか? なぜこれが重要なのですか?さて... C ++の新しい多次元クラスには何を使うべきですか。size_tまたはint? struct Foo final // e.g., image, matrix, etc. { typedef int32_t /* or int64_t*/ dimension_type; // *OR* always "size_t" ? typedef size_t size_type; // c.f., std::vector<> dimension_type bar_; // maybe rows, or x dimension_type baz_; // e.g., columns, or y …
15 c#  c++  array 

1
std :: vector <bool>はどのようにして生まれたのですか?
今日、事実上すべてのC ++開発者std::vector&lt;bool&gt;は、それが間違いではコンテナではないため、間違いであることに同意し、その使用例はstd::bitsetとにかく重複しています。 どのようにして標準に投票されましたか?当時は物議をかもしていましたか?主な支持論拠は何でしたか?
15 c++  history  stl 

6
メモリのアライメントはどのくらい重要ですか?まだ重要ですか?
しばらくしてから、メモリアライメント、それがどのように機能し、どのように使用するかについて、多くのことを検索して読みました。私が今見つけた最も関連性の高い記事はこれです。 しかし、それでも私はまだそれについていくつかの質問があります: 組み込みシステムでは、コンピューターに大量のメモリが割り当てられていることが多く、メモリ管理の評論を減らすことができます。私は完全に最適化に取り組んでいますが、今では、同じプログラムを比較したり、メモリーの再配置と調整なしで? メモリアライメントには他の利点がありますか?私はどこかでCPUがアライメントされたメモリでより良く/より速く動作することを読んだのですが、それは処理するための命令をより少なくします(あなたの誰かがそれに関する記事/ベンチマークへのリンクを持っている場合)、その場合、違いは本当に重要ですか?これら2つ以上の利点がありますか? 第5章の記事リンクで、著者は次のように述べています。 注意:C ++では、構造体のように見えるクラスはこの規則に違反する可能性があります!(基本クラスと仮想メンバー関数の実装方法に依存するかどうかは、コンパイラーによって異なります。) この記事では主に構造について説明していますが、ローカル変数の宣言もこのニーズの影響を受けますか? C ++でメモリアラインメントが正確に機能する仕組みについて、何か違いがあるように思えますか? この前の質問には「アラインメント」という単語が含まれていますが、上記の質問に対する回答はありません。

2
std :: exceptionから派生/継承する必要がありますか?
私の最初の「深刻な」C ++ライブラリを設計するとき、私は次のことを自問しています: 例外を派生させるのは良いスタイルstd::exceptionですか?それは子孫ですか?! 読んだ後でも 例外クラスの設計 ライブラリに実装する「良い数」の例外とは何ですか? まだわかりません。というのは、一般的な(ただし、良くないかもしれない)プラクティスに加えて、ライブラリユーザーとしてstd::exception、ライブラリ実装で標準ライブラリ関数が失敗した場合にのみライブラリ関数がs をスローし、それについて何もできないと仮定するからです。しかし、それでも、アプリケーションコードを記述するとき、私にとっては非常に便利であり、また、単にをスローするだけでも見栄えが良いstd::runtime_errorです。また、私のユーザーは、定義された最小限のインターフェース(what()コードやコードなど)に依存することもできます。 また、たとえば、ユーザーが誤った引数を指定した場合、をスローするよりも便利なのは何std::invalid_argumentですか?だから、std :: exceptionのまだ一般的な使用と組み合わせて、他のコードで見ます:さらに進んで、カスタム例外クラス(例えばlib_foo_exception)から、そしてから派生してみませんかstd::exception。 考え?
15 c++  exceptions 

4
OOPアプリケーションでのパラメーター管理
OOPの原則を実践する方法として、C ++で中規模のOOPアプリケーションを作成しています。 私のプロジェクトにはいくつかのクラスがあり、それらのいくつかはランタイム構成パラメーターにアクセスする必要があります。これらのパラメーターは、アプリケーションの起動時にいくつかのソースから読み取られます。ユーザーのhome-dirにある設定ファイルから読み込まれるものもあれば、コマンドライン引数(argv)であるものもあります。 そこで、クラスを作成しましたConfigBlock。このクラスは、すべてのパラメーターソースを読み取り、適切なデータ構造に格納します。例としては、構成ファイルまたは--verbose CLIフラグでユーザーが変更できるパスとファイル名があります。次に、ConfigBlock.GetVerboseLevel()この特定のパラメーターを読み取るために呼び出すことができます。 私の質問:このようなすべてのランタイム構成データを1つのクラスに収集することをお勧めしますか? 次に、クラスはこれらすべてのパラメーターにアクセスする必要があります。私はこれを達成するためのいくつかの方法を考えることができますが、どの方法を取るべきかはわかりません。クラスのコンストラクターは、次のようにConfigBlockへの参照を指定できます。 public: MyGreatClass(ConfigBlock &amp;config); または、CodingBlockの定義を含むヘッダー「CodingBlock.h」を含めるだけです。 extern CodingBlock MyCodingBlock; その後、クラスの.cppファイルのみがConfigBlockのものを含めて使用する必要があります。 .hファイルは、このインターフェイスをクラスのユーザーに導入しません。ただし、ConfigBlockへのインターフェイスはまだありますが、.hファイルからは隠されています。 このように隠すのは良いですか? インターフェイスをできるだけ小さくしたいのですが、最終的には、構成パラメーターを必要とするすべてのクラスがConfigBlockに接続する必要があると思います。しかし、この接続はどのように見えますか?

3
オブジェクト指向言語での非オブジェクト指向プログラミング[非公開]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 最近、オブジェクト指向プログラミングを使用して、関数の加算、減算、乗算、除算、およびパワーを備えた計算機を作成するタスクを割り当てられました。このタスクを正常に完了しました。しかし、その後、オブジェクト指向のテクニック/メソッドを使用せずにプログラム全体を再プログラミングしました。 私が気づいたのは、コードの長さが大幅に短縮され、非常に理解しやすいことでした。ここでの私の質問は、オブジェクト指向プログラミングをいつ使用する必要があるかということです。オブジェクト指向言語でオブジェクト指向のないプログラムを作成しても大丈夫ですか?これで私を親切に助けてください。 PS:ここでは、手続き型プログラミングよりもオブジェクト指向プログラミングのメリットを教えてほしいとは思っていません。

6
フレンドクラスを使用したC ++の単体テストプライベートメソッド
これは議論の余地があることを知っていますが、これが私にとって最良の選択肢であると仮定しましょう。私はこれを行うための実際のテクニックは何なのかと思っています。私が見るアプローチはこれです: 1)テストするメソッドのクラスのフレンドクラスを作成します。 2)friendクラスで、テストされたクラスのプライベートメソッドを呼び出すパブリックメソッドを作成します。 3)friendクラスのパブリックメソッドをテストします。 上記の手順を説明する簡単な例を次に示します。 #include &lt;iostream&gt; class MyClass { friend class MyFriend; // Step 1 private: int plus_two(int a) { return a + 2; } }; class MyFriend { public: MyFriend(MyClass *mc_ptr_1) { MyClass *mc_ptr = mc_ptr_1; } int plus_two(int a) // Step 2 { return mc_ptr-&gt;plus_two(a); } private: …

2
どちらが良いですか:選択文字列パラメータを持つゲッターの束または1つのメソッド?
私たちの知識領域には、素足で圧力記録プレートの上を歩く人々が含まれます。センサーデータで人間の足が認識されると、「Foot」クラスのオブジェクトを生成する画像認識を行います。 足のデータに対して実行する必要がある計算がいくつかあります。 さて、どのAPIの方が良いでしょう: class Foot : public RecognizedObject { MaxPressureFrame getMaxPressureFrame(); FootAxis getFootAxis(); AnatomicalZones getAnatomicalZones(); // + similar getters for other calculations // ... } または: class Foot : public RecognizedObject { virtual CalculationBase getCalculation(QString aName); // ... } 今、私が思いつくことができる多くの賛否両論がありますが、どれが最も重要かを本当に決めることはできません。これはエンドユーザーアプリケーションであり、当社が販売するソフトウェアライブラリではありません。 何かアドバイス? 最初のアプローチのプロには次のようなものがあります。 KISS-すべてが非常に具体的です。APIですが、実装も同様です。 強く型付けされた戻り値。 このクラスを継承するのは簡単です。上書きすることはできず、追加するだけです。 APIは非常に閉じられており、何も入れられず、オーバーライドされることもありません。 いくつかの短所: 新しい計算がリストに追加されるたびに、ゲッターの数が増えます APIは変更される可能性が高く、重大な変更が導入された場合、新しいAPIバージョンであるFoot2が必要です。 他のプロジェクトでクラスを再利用する場合、すべての計算が必要になるとは限りません …

4
一部のプログラマーがC、Python、C ++を異なるカテゴリーに分類するのはなぜですか?-レベルについて
私はpythonの入門コースを受講しており、講師はpythonは高レベル言語であり、CおよびC ++は低レベル言語であると言っています。紛らわしいです。C、C ++、Python、Javaなどはすべて高レベル言語だと思いました。 私はC、C ++などのstackoverflowで質問を読んでいたが、それらはすべてそれらの言語を高レベルと呼んでいるようだ。一部のプログラマーはこれらの用語を同じ意味で使用しているようです。

7
CおよびC ++では、equivalency(==)が必要な場所で、assignment(=)の偶発的な使用を防ぐことができる方法は何ですか?
CおよびC ++では、重大なエラーを伴う次のコードを書くのは非常に簡単です。 char responseChar = getchar(); int confirmExit = 'y' == tolower(responseChar); if (confirmExit = 1) { exit(0); } エラーは、ifステートメントが次のようになっている必要があることです。 if (confirmExit == 1) コーディングされているように、confirmExit変数の割り当てが発生し、confirmExit式の結果として使用されるため、毎回終了します。 この種のエラーを防ぐ良い方法はありますか?

2
WinRTは本当に境界でのみ使用できますか?
Microsoft(主にHerb Sutter)は、WinRTをC ++ / CXとともに使用して、WinRTをアプリケーションの境界に保ち、アプリケーションのコアを標準ISO C ++で記述したままにすることを推奨しています。 私は移植性を残したいアプリケーションを書いているので、私のコア機能は標準C ++で書かれており、C ++ / CXを使用してMetroスタイルのフロントエンドを書こうとしています。ただし、このアプローチには少し問題があります。たとえば、ユーザー定義のC ++型のベクトルをXAML ListViewコントロールにプッシュしたい場合、ユーザー定義型をWinRT ref / value型にラップして、に格納する必要がありVector^ます。このアプローチでは、C ++クラスの大部分をWinRTクラスでラップする必要があります。 C ++で移植可能なネイティブアプリケーションを記述しようとしたのはこれが初めてです。このような境界に沿ってWinRTを維持することは本当に実用的ですか?プラットフォーム固有の境界を持つこのタイプのポータブルコアは、他にどのように処理できますか?
15 c++  portability  winrt 

6
コンパイラを作成するのにC ++を使用する理由
コンパイラを書くのになぜC ++が良い選択なのか疑問に思っていました。もちろん、多くのコンパイラはCまたはC ++で記述されているため、Cもこの目的に適していますが、今回はC ++に興味があります。正当な理由はありますか?インターネットでそれを探していましたが、正当な理由を見つけることができません。
15 c++  compiler 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.