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

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

3
テンプレートを使用する場合、ますます長いコンパイル時間をどのように処理しますか?
私はVisual Studio 2012を使用していますが、ユニットテストでこれらのパーツをモックオブジェクトに置き換えることができるように、「継ぎ目」を導入するためにクラスパラメーターにテンプレートパラメーターを追加した場合があります。 通常、C ++でどのようにシームポイントを導入しますか。テンプレートパラメーターを使用して、暗黙的なインターフェースとのいくつかの基準に基づいてインターフェースを使用したり、混合したりしますか?これを求める理由の1つは、1つのC ++ファイル(テンプレートファイルを含む、他のテンプレートも含む可能性がある)をコンパイルすると、開発者のマシンで約5〜10秒かかるオブジェクトファイルが生成されるためです。 。 VSコンパイラは、私が理解している限り、テンプレートをコンパイルするのに特に高速ではありません、テンプレートインクルードモデルのために(実際にテンプレートの定義を間接的に使用するすべてのファイルに含め、変更するたびにそのテンプレートを再インスタンス化する可能性がありますそのテンプレートとは何の関係もない)コンパイル時間に問題がある可能性があります(インクリメンタルコンパイルを行う場合)。 テンプレートを操作するときに、コンパイル時間をインクリメンタルに(そしてそれだけでなく)処理する方法は何ですか(より良い/より速いコンパイラに加えて:-))。
13 c++  tdd  templates 

1
高次リスト関数のC ++ 11サポート
などなど、ほとんどの関数型プログラミング言語(例えばCommon Lispの、スキーム/ラケット、Clojureの、ハスケル、スカラ座、OCamlで、SML)リスト上のいくつかの一般的な高階関数をサポートするには、map、filter、takeWhile、dropWhile、foldl、foldr(例えば参照、Common Lispの、スキーム/ラケットをClojureの並列リファレンスシート、Haskell、Scala、OCaml、およびSMLドキュメント。 C ++ 11には、リストに同等の標準メソッドまたは関数がありますか?たとえば、次のHaskellスニペットを考えます。 let xs = [1, 2, 3, 4, 5] let ys = map (\x -> x * x) xs 最新の標準C ++で2番目の式をどのように表現できますか? std::list<int> xs = ... // Initialize the list in some way. std::list<int> ys = ??? // How to translate the Haskell expression? 上記の他の高階関数はどうですか? C …

4
C ++とJavaの抽象クラス/インターフェースには異なる使用原理がありますか
Herb Sutterによると、実装を可能な限り分離するために、C ++の抽象クラスよりも抽象インターフェイス(すべて純粋な仮想関数)を好むはずです。私は個人的にこのルールが非常に役立つと感じていますが、最近、多くのJavaプログラマーとチームに参加しましたが、Javaコードにはこのガイドラインは存在しないようです。関数とその実装は、非常に頻繁に抽象クラスに配置されます。だから、C ++でさえハーブサッターをすべて間違っているのか、それともJavaと比較してC ++の抽象関数の使用に一般的な違いがあるのか​​。実装コードを持つ抽象クラスは、C ++よりもJavaの方が賢明ですか?

7
シングルトン、抽象クラス、インターフェースの役割は何ですか?
私はC ++でOOPを勉強しており、これら3つの概念の定義を知っていても、それをいつどのように使用するかを本当に理解できません。 このクラスを例に使用してみましょう。 class Person{ private: string name; int age; public: Person(string p1, int p2){this->name=p1; this->age=p2;} ~Person(){} void set_name (string parameter){this->name=parameter;} void set_age (int parameter){this->age=parameter;} string get_name (){return this->name;} int get_age (){return this->age;} }; 1. シングルトン クラスが1つのオブジェクトのみを機能させるという制限はどのように機能しますか? CANあなたは持っているだろう、クラス設計ONLY 2のインスタンスを?それとも3? WHEN /必要な推奨シングルトンを使用していますか?それは良い習慣ですか? 2. 抽象クラス 私の知る限り、純粋な仮想関数が1つしかない場合、クラスは抽象になります。だから、追加 virtual void print ()=0; しますよね? なぜあなたは、そのオブジェクト必要とされていないクラスが必要でしょうか? …

3
std :: stringのc_str()にはどのようなパフォーマンスが期待できますか?常に一定の時間ですか?
私は最近、いくつかの必要な最適化を行ってきました。私がやっていることの1つは、ostringstreams-> sprintfsを変更することです。私はたくさんのstd :: stringsをacスタイルの配列、alaにスプリントしています char foo[500]; sprintf(foo, "%s+%s", str1.c_str(), str2.c_str()); Microsoftのstd :: string :: c_str()実装は一定の時間で実行されることがわかりました(内部ポインターを返すだけです)。と思われるのlibstdc ++が同じことを行います。stdはc_strを保証しませんが、これを行う別の方法を想像するのは難しいと思います。たとえば、メモリにコピーした場合、バッファにメモリを割り当てる必要があります(呼び出し元に任せて破棄します-STLコントラクトの一部ではありません)または、内部staticにコピーする必要がありますバッファ(おそらくスレッドセーフではないため、その寿命については保証されません)。したがって、内部的に維持されているヌル終了文字列へのポインタを単に返すことが唯一の現実的な解決策のようです。

7
C ++に一般的な大文字表記規則はありますか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 私はPythonとJavaで多くの仕事をしており、両方の言語には識別子で大文字を使用する方法に関するかなり一般的な(普遍的ではない)規則があります:PascalCaseクラス名とALL_CAPS「グローバル」定数の両方で使用しますが、他の識別子には多くのJavaコードが使用するのmixedCaseに対し、多くのPythonコードはを使用しunderscore_delimitersます。特定の大文字と小文字を強制する言語やライブラリはないことは知っていますが、使用している言語の標準的な規則に従うと、コードがはるかに読みやすくなることがわかりました。 今、私はC ++でプロジェクトを開始していますが、同じアイデアを適用したいと思います。大文字と小文字の区別について知っておくべき最も一般的な規則はありますか?

7
C#の経験はC ++にうまく変換できますか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 学校でのプログラミングクラスはC ++でしたが、最後の数年間はC#の仕事をしていました。C ++で1年または2年の経験が必要なポジションがある場合、C#での経験は考慮に値しますか?私はそのような立場にどれほど効果的でしょうか?必要な経験を積むには、エントリーレベルのC ++プログラマーとして始める必要がありますか?
13 c#  c++  experience 

9
C ++でのIBMアセンブラー+ COBOLの書き換え
私は1972年に書かれたレンタルシステムで実行されているレンタカー会社のレンタルエージェント/マネージャーとして働いています。ちょっとした背景として、このプログラムから毎日対処しなければならない狂気の短い例を以下に示します。 レンタルエージェントは、1つの画面での印刷がACTフィールドで「MXC」を使用することを覚えておく必要があります(すべてが短いコードに基づいています)。これは「MaXimum display on a Contract」を意味し、別の画面ではPR(PRint) ACTIONフィールドですが、いくつかの画面はPT(PrinTの場合)フィールドでYを使用し、さらに別の画面はPRT(PRinTの場合)フィールドでYを使用しますが、さらに別の画面ではユーザーがEnterキーを押す必要があります(ただし、文字、それは改行文字であるため、数字パッドで入力する必要があります)、F8、異なるが関連する画面には単にF8が必要です、一部の画面にはPRinT用のフィールドがありますが、実際にはフィールド何もせず、いくつかのプロンプトを通過した後、印刷が自動的に行われ、さらに多くの画面にPRINT Y / Nというラベルのフィールドがあります。これは、別の場所が既に書類を提出している業務ではデフォルトでYになり、別のディーラーが書類を必要とする業務ではNになります。 私はこれよりも良い仕事をすることができると決めたので、これを更新する決定を下す会社の人に連絡することにしました。最終的に、このプログラムを担当するITのVPに連絡します。私は彼から少し情報を入手し、私のレンタカー会社がIBMメインフレームアセンブラーで書かれたCOBOLを少し混ぜたレンタルプログラムを持っていることを知りました。とにかく彼に私の履歴書をメールしてください(何かが開いた場合)。 これは私の質問につながります。 最初は技術的です。将来、保守性を向上させるという考えで、アセンブリ言語よりも高いレベルの言語で書き直すことを考えています。私の経験分野はC ++なので、それは私にとって明らかな選択です。私は最近、私が話した人がチームが一生懸命働いたと言われているという記事を読んだので、プログラムを更新する簡単な方法を切に必要としています。 -桁のロケーションコード(4ではなく)と8桁の車番号(7ではなく)。更新に関する私の哲学は、このような悲惨な状況であっても、Joelの方針に沿っています:http : //www.joelonsoftware.com/articles/fog0000000069.html要するに、再書き込みは以前のすべてを捨てるのではなく、増分する必要があります新鮮に始めます。 IBMアセンブリをC ++と統合する簡単な方法はありますか?ある場合、どうすればよいですか?私はasmキーワードを漠然と認識していますが、それを使用するのが最適なのか、それとも何か他のことをするのが最適なのかわかりません。そのような計画はお勧めしませんか?私はg ++とGNU makeを使用してLinuxでほとんどの作業を行っているので、それに固有の回答は歓迎されますが、絶対に必要ではありません(どのようなビルドシステムがないのかわからないので、ほとんど何もありません)。 2番目の質問はより政治的です。切り替えを行う必要があることをこの会社に説得するにはどうすればよいですか?理論上のコスト削減は莫大です(私の見積もりによれば、会社はプログラムとやり取りする方法を学ぶためのトレーニングコストの増加だけで年間余分に数百万ドルを無駄にしています)が、私の提案された変更はおそらくすべての現在のプログラマーは、仮に彼らが制定されたとしても仕事を終えているので、変化に対する大きな構造的抵抗があります。 編集:会社が既に持っているものを変更する理由が、私にとって最良の解決策のように思える理由を説明しなければなりません。ただし、これはプログラムの怪物であるため、他の提案を受け入れています。プログラミングの仕事をしたことがないので、間違った分析を修正してください。 まず、既製のソリューションがあります。 この種のことについてのいくつかの中間レベルのマネージャーとの私の話から、新しいシステムに切り替えることの主な懸念の1つは、何十年も会社にいて、今までシステムに慣れている忠実な従業員の大多数です。持っているものを変更できる場合は、現在のインターフェイスを一種の「互換モード」に維持できます。ユーザーは既に現在のシステムを使用するためにログインする必要があるため、ユーザーが(この変更を行った後)初めてログインするときに設定をアクティブ化する機能を追加できます。 「クラシック」インターフェースまたは「新しい」インターフェース。それを可能にする既成のソリューションを見つける方法はありません。 私の会社も私たちが使用するソフトウェアを所有しています。私たちはそれをライセンスしません。これは、私が現在話している経営陣は、実際に私に変更を許可することができる人と同じであることを意味します。サードパーティのソリューションでは、使用する製品を開発した会社から必要な権利を確保することに加えて、会社から承認を得なければならないため、ハードルが追加されます。また、これは会社に「彼らの」製品をあきらめて他の製品を使用するよう説得することを必要とします。これは、私たちが持っているものを更新しようとするよりも大きなハードルのようです。 最後に、将来を見据えて、ユーザーインターフェイスを改善し、いくつかのバグを修正したいだけではありません。これらの「緊急」問題を更新した後、テクノロジーに関連する会社の基本的な方法を更新したいと考えていました。この種の問題に1〜2年費やした後、私の計画は経営陣に戻り、より劇的な変化を提案することでした。会社が運営している多くの方法がありますが、それらは現在使用していない技術によって根本的に改善される可能性があります。たとえば、各リージョンはほぼ同じように動作します。地元の主要空港は、自動車を配送する中心的なハブです。これらは主に必要に応じて送信されます。ただし、空港はすべての操作のホームベースとして使用されます。彼らは1台の車で2人を私の場所に送り、必要のない1台の車を私たちから受け取ります。その後、彼らが入った車と、彼らが取り戻しているもの(空港から32マイル)を持って空港に戻ります。その後、2台の車で5マイル離れた場所に到着し、1台を降ろしてから、もう1台の車で空港に戻ります。たとえ私たちが送り返した車が私たちの近くで必要な同じ種類の車であっても、彼らはこれを行います。私は約2年前から会社に勤めていますが、自動車不足の最も極端な緊急事態(これまで約3回)で、彼らがこれから逸脱しているように見えます。すべての地域で働く4人を、どの車がどこに行くかを決定する自動スケジューリングシステムに置き換え、必要な場所にすべての車を届けるために最短時間+マイル+ドライバーを必要とする経路を見つけようとしますより高いレベルの修正の例は、いつか追加したいと思っています。 ただし、これらすべてを提案することに不安を感じる前に、インターフェイスの更新などの小さなタスクを実行することで、会社とコードベースの足掛かりをつかむことが役立つと思います。アウトソーシングなどのソリューションは、この可能性を排除します。

6
「RAIIイディオムを説明する」は、C ++スクリーニングの良い質問ですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 一緒に仕事をしている会社から、候補者に電話をかけて候補者に電話をかけるときに恥ずかしい思いをさせないように、電話候補者のスクリーニングを依頼されました。 かなりの数の人がC ++開発者の役割に配置されていたことがわかります。私はC ++にあまり時間を費やしていませんが、この言語で些細なことや些細でないことをいくつか行っています。「RAIIのイディオムを説明する」は、ほとんどの深刻なC ++開発者が半分眠っている間に答えることができる素晴らしいソフトボールの質問であり、経験に関するより興味深い質問に進むことができると考えました。しかし、頭字語を「Resource Acquisition is Initialization」に拡張しても、10年以上のC ++の経験がある人はこの用語を認識していません。ある候補者は、Windows開発にこの手法を適用することは必ずしも実用的ではないと感じたとまで言いましたが、これは奇妙な感情だと思いましたが、その考えを裏付けていると思われる例がいくつかありました。)。 私の能力を判断するのに十分なほどよく知っているC ++開発者の2人でさえ、この用語を認識していないと言っていましたが、テクニックの要約を読んで、これらのことをあなたがしなければならないことだと考えていました。」Stroustrupの本の第2版の用語を覚えていますが、当時は完全な影響はありませんでした。 それで、「RAIIのイディオムを私に説明できますか?」公正なスクリーニングの質問ですか?すべての有能なC ++開発者がそれを理解することを期待するのは妥当ですか?この用語は私が考えるよりも難解ですか?候補者がその用語を知らないと仮定すると、RAIIを機能させるプラクティスを少なくとも内部化したかどうかを知るのに役立つフォローアップの質問はありますか?候補者に回答の自由度を与え、候補者がC ++開発の理解を実証するのに役立つ代替の「ウィーダー」質問がありますか? 編集して追加する:明確にするために、私は人々が流行語や頭字語を知らないために人々を失格にするようなインタビュアーではありません。ただし、経験豊富なC ++プログラマがリソース管理の優れたプラクティスを内部化したことを期待するのは合理的だと思います。また、設計や問題解決などについてのより興味深い質問に進む前に、候補者が専門知識を主張する技術に関するいくつかの「基本」を理解していることを検証することも重要だと思います。 「ハード」な質問をする前に、短い電話スクリーニングでの使用に適した自由回答形式の質問をして、C ++での優れたリソース管理の実践に関する候補者の基本的な理解を判断できます。
13 c++  interview 

7
設計:親クラスへのコールバック
子を持つオブジェクトをモデリングするとき、親クラスのメンバーとして、構成を介して子を含めるのが一般的です。ただし、子が親に何かを伝える必要がある場合もありますが、親の関数を呼び出す必要があります。C ++を使用してこれをどのように達成できますか?いくつかのオプションは次のとおりです。 親クラスをグローバルにします。したがって、子オブジェクトは親オブジェクトのメンバー関数を呼び出すことができます。 すべての子オブジェクトに、親オブジェクトをポインターまたは参照として注入します。子が親オブジェクトに何かを伝える必要がある場合、使用できるメンバー変数があるため、子は常にそうすることができます。 これを行う他の方法は何ですか?この種の一般的なデザインパターンや名前はありますか? 他のオブジェクト指向言語では詳細が異なるため、C ++のアイデアとソリューションに興味があることに注意してください。たとえば、上記のポイント2では「ポインターまたは参照」に言及しており、両方ともC ++でのみ可能です。C ++には他の言語にはない言語機能があるため、問題の解決策を実装すると、これらの言語機能が組み込まれる可能性があり、他の言語で考えられるソリューションとは異なるソリューションになります。

4
C / C ++では、可能であればパラメーターとローカル変数で 'const'を使用する必要がありますか?
この質問は、Java に関する質問にfinal触発されたものです。 C / C ++では、const可能な限り使用する必要がありますか? パラメータでの使用constに関して、関連する質問が既にあることは知っています。残念ながら、その質問とその回答は関数のパラメーターに関するものだけなので、私の質問には完全には答えませんが、他のケース(たとえば、ローカル変数)についても知りたいです。 また、その質問に対するほとんどすべての回答constは、変数のアクセス可能性に関する有用な情報が含まれているため、使用する必要があると述べています。しかし、これはJavaでfinalを使用することに関する回答と矛盾するようです。このfinal情報は、余分な情報が含まれていない場合は不必要であり、コードを短く簡潔にするために省略する必要があると述べています。 それで、const可能な限り使用すべきですか?もしそうなら、なぜconstC ++でのアドバイスfinalがJavaでのアドバイスと異なるのですか?

4
sizeofがコンパイル時演算子と呼ばれるのはなぜですか?
もともと、これは別の質問の一部です。 sizeofコンパイル時演算子と呼ばれるのはなぜですか?それは実際には実行時演算子ではありませんか?そして、それが実際にコンパイル時の演算子である場合、異なるコンピューターで同じものを実行する移植可能なコードを生成するのにどのように役立ちますか?詳しく説明してください。
12 c++ 

2
ストリームマニピュレータ(endl)または改行エスケープ文字(\ n)を使用していますか?
質問している特定のコンテキストはありませんが、C ++の初心者向けの本を読んでいるときに、ストリームオブジェクトを処理するときにendlストリームマニピュレーターと改行エスケープ文字の両方を使用していることに気付きました。 例は次のとおりです。 cout << "Hello World" << endl; cout << "Hello World\n"; 私の質問は: 特定の状況でストリームマニピュレーター(endl)を使用し、別の状況でエスケープ文字を使用する方が適切ですか? 2つのうちの1つを使用するのが賢明な効率上の欠点はありますか? それらは完全に交換可能ですか? エスケープシーケンスは単一の文字としてメモリに格納されることを読みました。それは、低メモリ消費のためにendlを使用することがより適切であることを意味しますか? ストリームマニピュレータはメモリを使い果たしますか? おかげで、StackExchangeが間違ったセクションにこれを投稿した場合、データ構造としてカウントされると思いました。

2
派生クラスが生の動的メモリを割り当てない場合、なぜ基本クラスに仮想デストラクタが必要なのですか?
次のコードはメモリリークを引き起こします。 #include <iostream> #include <memory> #include <vector> using namespace std; class base { void virtual initialize_vector() = 0; }; class derived : public base { private: vector<int> vec; public: derived() { initialize_vector(); } void initialize_vector() { for (int i = 0; i < 1000000; i++) { vec.push_back(i); } } }; …

1
フレンドクラスを使用してプライベートメンバー関数をC ++でカプセル化する-良い習慣ですか?
だから私は、次のようなことをすることでヘッダーにプライベート関数を置くことを避けることが可能であることに気付きました: // In file pred_list.h: class PredicateList { int somePrivateField; friend class PredicateList_HelperFunctions; public: bool match(); } // In file pred_list.cpp: class PredicateList_HelperFunctions { static bool fullMatch(PredicateList& p) { return p.somePrivateField == 5; // or whatever } } bool PredicateList::match() { return PredicateList_HelperFunctions::fullMatch(*this); } プライベート関数はヘッダーで宣言されることはなく、ヘッダーをインポートするクラスのコンシューマーは、それが存在することを知る必要はありません。これは、ヘルパー関数がテンプレートの場合に必要です(代替方法はヘッダーに完全なコードを配置することです)。これが、私がこれを「発見」した方法です。プライベートメンバ関数を追加/削除/変更する場合、ヘッダーを含むすべてのファイルを再コンパイルする必要がないというもう1つの利点があります。すべてのプライベート関数は.cppファイルにあります。 そう... これは有名なデザインパターンですか? 私にとって(Java / C#のバックグラウンドから来て、自分の時間でC …

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