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

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

11
Postfix Increment演算子を避ける
パフォーマンス上の理由で(特定の場合に)後置インクリメント演算子を避けるべきだと読みました。 しかし、これはコードの可読性に影響しませんか?私の考えでは: for(int i = 0; i < 42; i++); /* i will never equal 42! */ より良く見える: for(int i = 0; i < 42; ++i); /* i will never equal 42! */ しかし、これはおそらく単なる習慣ではありません。確かに、私は多くの使用を見ていません++i。 この場合、パフォーマンスは可読性を犠牲にするのに悪いですか?または私はただ盲目であり、++iより読みやすいですi++か?

3
ポインタをインクリメントする理由
私は最近C ++の学習を始めましたが、ほとんどの人が(これまで読んでいたことによると)ポインターに苦労しています。 伝統的な意味ではなく、私はそれらが何であり、なぜ使用されているのか、どのように役立つのかを理解していますが、ポインタのインクリメントがどのように役立つかを理解することはできません、誰もポインタのインクリメントが便利な概念と慣用的なC ++? この質問は、Bjarne StroustrupによるA Tour of C ++の本を読み始めた後に出てきたものです。 。
25 c++  c  pointers 

4
C以外のC ++リンケージ言語?
C ++言語では、1つのソースファイルでC ++とCの両方を混在させることができます。例えば、 extern "C" { struct bar { /* ... */ } } C ++またはC以外の「リンケージ言語」をサポートしたことがありますか?例extern "Pascal"またはextern "Haskell"

5
共有コーディングパラダイムを使用するという点で、言語Yでプログラムを記述しているように、言語Xで何かを記述するのがなぜ悪いのか[非公開]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 5年前に閉鎖されました。 しばらく前に、私はC ++で書かれた何かについてのSOの質問をし、代わりに手で問題に答えを得るための、コメントは、私はそれがあることが示された場合でも、私のコーディングスタイル上のすべての大騒ぎWIPのコードの一部そして、ベースケースを実行させたときに、後でクリーンアップするつもりだった。(私は非常に多くの票を集めたので、私はSOの担当者がすでにほぼ最悪であるため、質問を撤回することにしました) なぜ人々は「あなたは初心者だ、自分で性交をする」という厳しいラインを採用するのだろうと思いました。私は、あたかもJavaであるかのようにC ++を書いていると非難されていました。私が理解できない何か、それでも私を困惑させます。 私は、間隔を置いてではあるが、何年もの間、かなりの数のOOP言語でプログラミングを行ってきました。使用可能なライブラリと、手元のジョブに最適な実行環境の観点から、使用する言語を選択します。私はOOPコードにデザインパターンを採用していますが、パターンの使用は適切であり、オブジェクト指向では賢明であると確信しています。私はOOPツールボックスを理解していますが、コーディングの知恵を示すためにきちんとしたトリックを使用するのではなく、本当に必要だと思うときにのみツールを使用することを選択します。(私が知っているのは一流ではありませんが、n00bレベルでもないと思います)。 1行書く前にコードを設計します。テストを定義するために、特定のクラスの目標と、クラスが順守しなければならないテスト基準をリストします。シーケンス図を作成してコードを書く方が簡単なので、インターフェイスが明らかになった後にテストを書くことにしました。 質問で投稿したコードの一部で、スマートポインターを使用する代わりに、ポインターを使用していることを認めなければなりません。できる限りRAIIを使用しています。適切なRAIIとは、nullpointersに対する保護を意味しますが、徐々に作業を進めます。それは進行中の作業であり、後でクリーンアップするつもりでした。この働き方は強く非難されました。 私の見解では、基本ケースが実行可能な思考方法であるかどうかを確認できるように、最初に実際の例を用意する必要があります。また、ベースケースが証明された後、コードのクリーンアップはアジャイルのリファクタリングフェーズの典型的なことだと思います。私はゆっくりとCxx標準を取得していますが、実稼働コードでまだ習得していない概念を使用するリスクを負うのではなく、理解しているものを使用することを好みます。たまに新しいものを試すこともありますが、通常はその目的のために、私が脇に置いているプレイプロジェクトでやっています。 [編集]質問を始める前に、gnatの提案[1]が検索に表示されなかったことを明確にしたいと思います。ただし、彼の提案は質問の1つの側面をカバーしていますが、彼がリンクした質問は私の質問の核心ではなく、その一部にすぎません。私の質問は、自分のコーディングスタイルに対する応答と、さまざまなコーディングスタイルと(見かけの)レベルのスキルを処理する専門的な側面についてです。SOについての以前の質問と、それが適切な事例としての回答です。[/編集] 質問は次のとおりです。あなたのコーディングスタイルを使用していない人をsc笑するのはなぜですか。 手元にある問題/下位区分は次のとおりです。 リファクタリングにより後で堅牢になった場合、プロトタイプの状況でエラーが発生しやすいコードを使用するのはなぜプログラミングの悪い習慣になるのでしょうか? C ++で書かれたプログラムは、Javaで書かれたようにどのようにできますか?何が悪いプログラムになっているのですか(現在のスタイルの意図と改善する予定の作業を示したと考えていますか?) 特定のプログラミングパラダイム(たとえば、OOP / DP)で使用される構造を使用することを選択した場合、どのように悪い専門家になりますか? [1] 高速でバグのあるものを開発し、エラーを修正するか、コードの各行に注意して遅くしますか?


1
C ++。Netは広く使用されていますか?
私は伝統的にC ++コーダーです。過去12か月ほどで、私は多くのC#コーディングを行っており、C#の実用的なアプローチに驚きました(「ガベージコレクションを使用したC ++」であるかのようにコーディングしようとするのをやめました)。 最近、卒業生が何人かいますが、そのうちの1人を助けると、C ++で.Netを使用していることに気付きました。理由を尋ねた後、彼女は「マネージャーからC ++を使用するように言われた」と言いました。明らかなコミュニケーションの問題は別として、彼女が.Netを使用していたのは、それが彼女にさらされた唯一のフレームワークだからです。 その後、C ++を使用してFormsフロントエンドを駆動する上級開発者による古いプロジェクトに出会いました。これは.Netが最初に登場した頃に書かれていたので、.Netをいじるのは彼の側の学習課題だったと思います。それは小さなユーティリティアプリでした。 このアプリでいくつかの小さな変更を行う必要があったため、C ++を使用して.Netを駆動すると、両方の世界で最悪の事態が発生するように思えました。ガベージコレクションやメモリの安全性はありませんが、マネージドフレームワークを扱っているため、同様に実際の速度/最適化の機会はありません。 だから私の質問は、人々がC ++ .Netを大規模なスタンドアロン(つまり非配管)プロダクションコードに使用するかどうかであり、そうであればあなたの理由は何ですか?私はC ++ .Net拡張機能を深く掘り下げたことがないので、私はそれを害しているのではないかと自由に認めています。
25 c++  .net 

8
初心者に最適なC ++ソースコードは何ですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 6年前に閉鎖されました。 私はC ++ソースコードを読むことでC ++コーディング技術を改善しようとしています。どのオープンソースプロジェクトをお勧めしますか?Boost C ++ Librariesのコードは良いものですか?
25 c++  open-source 

6
依存性注入; 定型コードを減らす良い習慣
簡単な質問があり、答えがあるかどうかはわかりませんが、試してみましょう。私はC ++でコーディングしており、グローバル状態を回避するために依存性注入を使用しています。これは非常にうまく機能し、予期しない/未定義の動作を頻繁に実行しません。 しかし、私のプロジェクトが成長するにつれて、定型的なものと考える多くのコードを書いていることに気づきました。さらに悪いことに、実際のコードよりも定型的なコードが多いため、理解が難しい場合があります。 良い例に勝るものはありません。 Timeオブジェクトを作成するTimeFactoryというクラスがあります。 詳細(関連があるかどうかはわかりません):Timeオブジェクトは非常に複雑です。Timeにはさまざまな形式があり、それらの間の変換は線形でも簡単でもないためです。各「Time」には、変換を処理するSynchronizerが含まれており、適切に初期化された同じシンクロナイザーを使用するために、TimeFactoryを使用します。TimeFactoryにはインスタンスが1つしかなく、アプリケーション全体であるため、シングルトンの資格がありますが、可変なので、シングルトンにしたくありません 私のアプリでは、多くのクラスがTimeオブジェクトを作成する必要があります。これらのクラスは深くネストされている場合があります。 クラスBのインスタンスを含むクラスAからクラスDまでのクラスAがあるとします。クラスDはTimeオブジェクトを作成する必要があります。 私の単純な実装では、TimeFactoryをクラスAのコンストラクターに渡します。クラスAは、クラスBのコンストラクターにそれを渡し、クラスDまで続きます。 ここで、TimeFactoryのようなクラスと上記のようなクラス階層がいくつかあると想像してください。依存性注入を使用すると考えられる柔軟性と読みやすさをすべて失います。 私は私のアプリに大きな設計上の欠陥がないのではないかと考え始めています...または、これは依存性注入を使用するのに必要な悪ですか? どう思いますか ?

5
C ++ヘッダーファイルが嫌いな場合はどうすればよいですか?
私はいつもヘッダーファイルについて混乱していた。それらはとても奇妙です。.cppを含まない.hファイルをインクルードしますが、.cppも何らかの方法でコンパイルされます。 最近、私はチームプロジェクトに参加しました。もちろん、.hと.cppの両方が使用されます。 これが非常に重要であることは理解していますが、複数のクラスのそれぞれにあるすべての関数宣言をコピーアンドペーストすることはできません。 2ファイルの規則を効率的に処理するにはどうすればよいですか? それを支援するツールはありますか、または以下の例のような1つのファイルを.hと.cppに自動的に変更しますか?(特にMS VC ++ 2010の場合) class A { ... Type f(Type a,Type b) { //implementation here, not in another file! } ... }; Type f(Type a) { //implementation here } ...

22
C(またはC ++)の使用方法を学ぶことは、優れた(優秀な)プログラマーになるための要件ですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 私が最初にプログラミングの方法を学び始めたとき、本当のプログラマーは眠っている間にアセンブリを書くことができました。コンピュータサイエンスの本格的な教育には、アセンブリを使用したプログラミングのトレーニングと実践が含まれます。それはその後変わっており、アセンブリを含むコンピューターサイエンスの学位が含まれている場合、それが1つの課題と1つの章に委ねられ、4年間の学校教育の合計2週間の作業になります。 C / C ++プログラミングも同様のパスをたどっているようです。C ++で2週間以上プログラミングをしておらず、どこかの本でCしか読んでいない大学卒業生にインタビューしても、私はもう驚かない。最も深刻なCS学位には、かなりの時間の学習と一方または両方の言語の使用が含まれているようですが、傾向は明らかに学校でのC / C ++の実施が少なくなる傾向にあります。 CやC ++のコードを1行も読み書きすることなく、良い仕事をするキャリアを作ることは明らかに可能です。 これらすべてを考えると、努力する価値のある2つの言語を学習していますか?彼らは優れている必要がありますか?(「包括的な教育にはおそらく適切な言語の選択が重要である」などの明確な非言語固有のアドバイスに加えて、「プログラマーのキャリアを通じて新しい言語を試し、学習し続けることはおそらく良い考えです。灰色のセルを引き伸ばす」)

8
どのようにしてconstの正しい変換になりましたか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 閉じた3年前。 15年間のC ++の後、私はまだconstを使うことを愛することを学んでいません。私はそれが使用されていることを理解していますが、実際にconstが正しいことで私が直面していた問題を回避できる状況になったことはありません。 それでは、どのようにconstの利点を愛するようになりましたか?

7
大規模なアプリケーションではSTLを回避する必要がありますか?
これは奇妙な質問に聞こえるかもしれませんが、私の部署では次のような状況で問題が発生しています。 ここでは、処理できるように、必要に応じて動的にロードし、後でアンロードするサーバーアプリケーションで作業しています。パフォーマンスの問題。 しかし、私たちが使用している関数は、入力パラメーターと出力パラメーターをSTLオブジェクトとして渡しているため、Stack Overflowの回答で述べたように、これは非常に悪い考えです。(投稿にはいくつかの±ソリューションとハックが含まれていますが、すべてが非常に堅実に見えるわけではありません。) 明らかに、入力/出力パラメーターを標準のC ++型で置き換え、関数内で一度それらからSTLオブジェクトを作成できますが、これによりパフォーマンスが低下する可能性があります。 1台のPCで処理できないほど大きくなる可能性のあるアプリケーションをビルドすることを検討している場合、STLをテクノロジとしてまったく使用しないでください。 この質問についてのさらなる背景:質問について いくつかの誤解があるようです:問題は次のとおりです: 私のアプリケーションは作業を完了するために膨大な量のパフォーマンス(CPU、メモリ)を使用しているので、この作業を分割したいと思います(プログラムはすでに複数の関数に分割されているため)アプリケーションからいくつかのDLLを作成し、それらのDLLのエクスポートテーブルにいくつかの関数を配置することはそれほど難しくありません。これにより、次の状況が発生します。 +-----------+-----------+---- | Machine1 | Machine2 | ... | App_Inst1 | App_Inst2 | ... | | | | DLL1.1 | DLL2.1 | ... | DLL1.2 | DLL2.2 | ... | DLL1.x | DLL2.x | ... +-----------+-----------+---- App_Inst1はMachine1にインストールされているアプリケーションのインスタンスであり、App_Inst2はMachine2にインストールされている同じアプリケーションのインスタンスです。 DLL1.xはMachine1にインストールされているDLLで、DLL2.xはMachine2にインストールされているDLLです。 DLLx.1は、エクスポートされたfunction1をカバーします。 DLLx.2は、エクスポートされたfunction2をカバーします。 次に、Machine1でfunction1とfunction2を実行します。これによりMachine1がオーバーロードされることがわかっているため、App_Inst2にメッセージを送信して、そのアプリケーションインスタンスにfunction2を実行するように要求します。 …
24 c++  stl 

6
読みやすさは(参照)パラメーターでconstを使用しない正当な理由ですか?
いくつかの関数を作成するときに、次のようなパラメーターにconstキーワードが見つかりました。 void MyClass::myFunction(const MyObject& obj,const string& s1,const string& s2,const string& s3){ } IDEまたはvimで行を2行に分割することがよくあるので、パラメーターのすべてのconstキーワードを削除したいと思います。 void MyClass::myFunction(MyObject& obj,string& s1,string& s2,string& s3){ } それはconstを使用しない正当な理由ですか?パラメータオブジェクトを手動で変更しないで維持することはできますか?

8
特定の順序で関数を呼び出す必要があるインターフェース設計
タスクは、入力仕様に従って、デバイス内のハードウェアを構成することです。これは次のように達成する必要があります。 1)構成情報を収集します。これは、さまざまな時間と場所で発生する可能性があります。たとえば、モジュールAとモジュールBは両方とも(異なる時間に)私のモジュールにリソースを要求できます。これらの「リソース」は、実際には構成です。 2)これ以上要求が実現されないことが明らかになった後、要求されたリソースの要約を提供する起動コマンドをハードウェアに送信する必要があります。 3)その後のみ、前述のリソースの詳細な構成を行うことができます(およびする必要があります)。 4)また、2)の後でのみ、選択したリソースの宣言された呼び出し元へのルーティングを行うことができます(およびする必要があります)。 バグの一般的な原因は、それを書いた私でさえ、この順序を間違えていることです。コードを初めて見る人がインターフェイスを使用できるようにするために、どのような命名規則、設計、またはメカニズムを使用できますか?
24 c++  interfaces 

9
C#開発者向けのC ++
私はC#をかなりよく知っているので(残念ながら独学で)、Windowsアプリケーション用にC ++プログラミングを行う必要があります。私は、C#を学習しているC ++開発者向けに多くの情報を見つけることができましたが、C#を既に知っているときには、C ++を学習することについて多くを見つけることができませんでした。誰かが基本の良い概要に出くわしましたか? MSDNには比較がありますが、それほど詳細ではありません。 私はいくつかのソースをつなぎ合わせることができますが、何かがそこにあると考えました-私はそれを見つけることができません。ご協力いただきありがとうございます。
24 c#  c++ 

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