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

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

6
.NETフレームワークでC ++を使用することは可能ですか?
C#とC ++の両方で、GUIプログラミングに関する多くのコメントを読みました。そして、Microsoftの.NETフレームワークがGUIプログラミングに強力であることに気付きました。C ++と.NETフレームワークを使用することは可能ですか? 私が読んだように、C ++は強力な言語であり、WindowsでのGUIプログラミングには.NETフレームワークが好まれるので、素晴らしい組み合わせになると思います。GUIをC#で作成し、機能をC ++で作成することはできますか?
18 c++  .net 

4
C ++でのレクサーの作成
C ++でレクサーを作成する方法に関する優れたリソース(書籍、チュートリアル、ドキュメント)は何ですか?優れたテクニックとプラクティスは何ですか? 私はインターネットを見ましたが、みんなlexのようなlexerジェネレーターを使うように言っています。私はそれをしたくありません。手で字句解析器を書きたいです。
18 c++  compiler  lexer 

3
出荷テストコード。なぜあなたはそうしませんか?
製品と一緒にテストコードを出荷したいと思います。具体的には、プログラムのコピーを持っている人がだれでも「セルフテスト」ボタンを押すか、コマンドラインで--self-testに合格してユニットの完全なスイートを実行できるようにするオプションを提供します。統合テスト。 私は主にこれを現場で発見された問題のデバッグに役立てたいと思っています。そのため、バグレポートがエンドユーザーから届くと、「また、これら3つのテストが私のマシンで失敗しました」によってサポートされる可能性があります。手動テスターでユニットを実行できるようにしたい| 統合テストも同様です。 ただし、チームのテストでは、テストコードは製品コードではないため、出荷されません。ほとんどのオープンソースプロジェクトにはテストスイートが同梱されているため、私は実際にはこの議論を受け入れていません。閉じたソフトウェアでは珍しいようです。 議論のどちらの側にも証拠や逸話を支持したいと思います。どのスタック交換サイトが最も適切かを推測しましたが、これが適切でない場合はお知らせください。

4
前方宣言とインクルード
Reduce the number of #include files in header files. It will reduce build times. Instead, put include files in source code files and use forward declarations in header files. これをここで読みます。http://www.yolinux.com/TUTORIALS/LinuxTutorialC++CodingStyle.html。 そのため、ヘッダーファイル内のクラス(クラスA)が、あるクラス(クラスB)の実際の定義を使用する必要がない場合に表示されます。そのとき、特定の(クラスB)ヘッダーファイルを含める代わりに、前方宣言を使用できます。 質問:ヘッダー内のクラス(クラスA)が特定のクラス(クラスB)の実際の定義を使用しない場合、どのように前方宣言がコンパイル時間の短縮に役立ちますか?
17 c++  coding-style 

5
列挙型は脆弱なインターフェースを作成しますか?
以下の例を考えてください。ColorChoice列挙の変更は、すべてのIWindowColorサブクラスに影響します。 列挙型は脆弱なインターフェースを引き起こす傾向がありますか?多態的な柔軟性を可能にする列挙型よりも優れたものはありますか? enum class ColorChoice { Blue = 0, Red = 1 }; class IWindowColor { public: ColorChoice getColor() const=0; void setColor( const ColorChoice value )=0; }; 編集:私の例として色を使用して申し訳ありませんが、それは質問についてのものではありません。これは、ニシンを避け、柔軟性の意味についてより多くの情報を提供する別の例です。 enum class CharacterType { orc = 0, elf = 1 }; class ISomethingThatNeedsToKnowWhatTypeOfCharacter { public: CharacterType getCharacterType() const; void setCharacterType( const CharacterType …

2
隣接する文字列リテラルの連結について
CおよびC ++は、隣接する文字列リテラルを単一の文字列リテラルとしてコンパイルします。例えばこれは: "Some text..." "and more text" 以下と同等です: "Some text...and more text" C#やJavaなどの他のCファミリ言語では、これは構文エラーです(完全に問題ありません)。 CおよびC ++がこれを行う理由/歴史的理由は何ですか?

4
機能に関するこれらの答えのどれが間違っていますか?
そのため、私はいくつかの長いコンパイルを行っている間に、ODeskでC ++の一般的なテストを受けることに決め、この質問に出会いました。 言葉遣い(またはその欠如)を考えると、私が間違っていなければ、これらすべてが真実である可能性があります。 a。 int Foo() { } int Foo(int bar) { } b。 まあ、return void;意味的には間違っていますが、関数は明らかにvoid戻り値の型を持つことができます。 void Foo() { } c。これはインライン関数の定義です、はい。 d。 次の要素の配置について詳しく説明しなくても、 typedef void (*Func)(int); Func functions[2]; void Foo(int bar) { } void Bar(int foo) { } functions[0] = &Foo; functions[1] = &Bar; さらに、ラムダとファンクターを使用していつでもこれを行うことができます。 e。 void Foo(int& bar) { …
17 c++ 

4
C ++のようなconstを言語に組み込む際の問題は何ですか?
私はC ++のようなconst特定の実行ではなく(キャストアウトのようなconst)のアイデアに興味があります。 たとえば、C#を考えてみましょう。C++のようなconstがなく、その理由は通常の人と時間です。さらに、C#チームはC ++の実行を見て、constCLRをマーケティングし、この時点で十分でした(c#およびconstパラメーターにconstメンバーメソッドがない理由を参照してください;ありがとうSvick)。ことがあれば、我々はさらにそれよりも移動し、何かありますか? もっと深いものはありますか?例えば、多重継承を考えてみてください-通常、(ユーザーにとって)把握するのは難しいと見られているため、言語に追加されません(ダイヤモンドの問題のように)。 言語にそれを避ける方が良いという問題を引き起こす自然の何かがありconstますか?const深さを浅くするか浅くするかを決定するようなものです(constコンテナがあるため、新しい要素を追加したり、既存の要素を変更したりできません。要素が参照型の場合はどうなりますか)。 更新:私はC#について言及しているため、歴史的な観点constから、言語の潜在的な問題の性質に興味があります。 これは言語の挑戦ではありません。現在の傾向や人気などの要因を無視してください-私は技術的な問題にのみ興味があります-ありがとうございます。

5
C ++のすべてにオブジェクト(プリミティブ型ではなく)を使用するのは理にかなっていますか?
私が取り組んでいる最近のプロジェクトでは、次のような多くの関数を使用する必要がありました。 static bool getGPS(double plane_latitude, double plane_longitude, double plane_altitude, double plane_roll, double plane_pitch, double plane_heading, double gimbal_roll, double gimbal_pitch, double gimbal_yaw, int target_x, int target_y, double zoom, int image_width_pixels, int image_height_pixels, double & Target_Latitude, double & Target_Longitude, double & Target_Height); だから私はこのように見えるようにそれをリファクタリングしたい: static GPSCoordinate getGPS(GPSCoordinate plane, Angle3D planeAngle, Angle3D gimbalAngle, PixelCoordinate …

3
OpenGLのグラフィックコードで最も効果的な自動テストをどのように単体テストまたは実行しますか?
C ++でOpenGLの上にゲームとそれに付随するグラフィックエンジンを書いています。また、優れたコーディングプロセスと自動テストのファンでもあります。出力は多くの場合視覚のみであるか、非常に視覚指向であるため、グラフィックスコード+テストは非常に混同しにくいようです。 たとえば、画面にバイト単位でレンダリングされる生の画像ストリームを分析することを想像してください-比較するテストデータが必要で、作成/取得が難しく、レンダリングされた画像はしばしば同じではありません異なる時間に実行する場合のバイトレベル-アルゴリズムの小さな変更は、このアプローチを完全に破壊します。 視覚的な単体テストスイートを作成することを考えています。基本的に、さまざまなテストシーンをレンダリングし、シャドウマッピング、アニメーションなどのようなものを表示できます。CIの一部として、これらのシーンはビデオにレンダリングされます異なるメトリックのファイル(または実行可能ファイルとして残すこともできます)。ビデオファイルの手動検査が必要になりますが、少なくともある程度自動化および標準化されます。 どう思いますか?もっと良い方法がありますか?

4
C ++での移動コンストラクターの動機付けと使用
私は最近、C ++の移動コンストラクターについて読んでいます(たとえば、こちらを参照)。それらがどのように機能し、いつ使用するかを理解しようとしています。 私の知る限り、移動コンストラクターは、大きなオブジェクトのコピーによって引き起こされるパフォーマンスの問題を軽減するために使用されます。ウィキペディアのページには、「C ++ 03の慢性的なパフォーマンスの問題は、オブジェクトが値渡しされたときに暗黙的に発生する可能性のある、コストが高く不必要なディープコピーです。」 私は通常そのような状況に対処します オブジェクトを参照渡しすることにより、または スマートポインター(boost :: shared_ptrなど)を使用してオブジェクトをやり取りします(オブジェクトの代わりにスマートポインターがコピーされます)。 上記の2つの手法では不十分で、移動コンストラクターを使用するほうが便利な状況は何ですか?

4
C ++で「using」を使用するか、それを避けますか?
ADLによるわずかに異なるセマンティクスの割引、一般的な使用方法using、およびその理由 状況に依存しますか(たとえば、#includedになるヘッダーとそうでないソースファイル)。 また、私は好むべきです::std::かstd::? 名前空間レベルusing namespace: using namespace std; pair<string::const_iterator, string::const_iterator> f(const string &s) { return make_pair(s.begin(), s.end()); } 完全に明示的であること: std::pair<std::string::const_iterator, std::string::const_iterator> f(const std::string &s) { return std::make_pair(s.begin(), s.end()); } 名前空間レベルのusing宣言: using std::pair; using std::string; pair<string::const_iterator, string::const_iterator> f(const string &s) { return make_pair(s.begin(), s.end()); } 関数ローカルusing宣言: std::pair<std::string::const_iterator, std::string::const_iterator> f(const std::string &s) …
17 c++  namespace 


13
繰り返しコードを入力しやすくするための#defineの適切な使用ですか?
コーディングを簡素化するために#defineを使用して完全なコード行を定義することは、プログラミングの実践として良いか悪いかについて意見はありますか?たとえば、大量の単語を一緒に印刷する必要がある場合、イライラするタイピングを取得します << " " << coutステートメントの単語間にスペースを挿入します。私はただできる #define pSpace << " " << そしてタイプ cout << word1 pSpace word2 << endl; 私にとっては、これはコードの明快さを加減せず、入力を少し簡単にすることもありません。通常デバッグのために、タイピングがはるかに簡単になると思う他のケースがあります。 これについて何か考えはありますか? 編集:すべての素晴らしい答えをありがとう!この質問は、繰り返しタイピングを何度も行った後に私に届いたものですが、使用する他の混乱の少ないマクロがあるとは思いもしませんでした。すべての答えを読みたくない人にとって、最良の代替案は、IDEのマクロを使用して、繰り返し入力を減らすことです。

3
GDBはどのように実行を一時停止しますか
ご存知かもしれませんが、GDBを使用してコードにブレークポイントを設定し、デバッグのために実行を一時停止できます。 私の質問は、GDBがプロセスをどのように一時停止しi r、たとえばレジスタを使用してレジスタの内容を表示できるかです。これらのレジスタは、他のOSプロセスで常に使用されていませんか?どうして上書きされないのですか? ライブデータではなく、コンテンツのスナップショットだけですか?
16 c++  debugging 

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