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

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

3
今日のC ++の役割は何ですか?
現在、私はITの学生であり、今日のC ++で今でも重要なのは何なのか、それは何のために使用されているのでしょうか?私は大学で基本的なC ++コースを修了しましたが、どこで知識を活用でき、どの方向でC ++を学習すべきか想像できません。 言い換えれば、成功したC ++プログラマになるために何を学ぶ必要がありますか? 現在、私は、C ++が今日どの分野で役立つ可能性があるのか​​明確に分からないという理由だけでJavaを学んでいますが、Javaプログラマーとしてどのような仕事をするのかを明確に知っています。しかし、私はまだC ++が死んでいないことを願っています。
41 c++ 

5
CとC ++の基本的な違いは何ですか?[閉まっている]
多くの人は、「C / C ++」と同じように書く傾向があります。それらは多くの類似点を共有していますが、明らかに同じではありません。 しかし、実際にはCとC ++の根本的な違いは何ですか?C ++はCの拡張バージョンですか、それともC ++には存在しないCの機能がありますか?
41 c++  c 

8
最新のオブジェクト指向言語はC ++の配列ストアのパフォーマンスと競合できますか?
少なくともある程度慣れ親しんでいる最新のオブジェクト指向プログラミング言語(基本的にはJava、C#、およびD)がすべて共変配列を許可していることに気付きました。つまり、文字列配列はオブジェクト配列です。 Object[] arr = new String[2]; // Java, C# and D allow this 共変配列は、静的型システムの穴です。コンパイル時に検出できない型エラーが発生する可能性があるため、実行時は配列へのすべての書き込みをチェックする必要があります。 arr[0] = "hello"; // ok arr[1] = new Object(); // ArrayStoreException これは、多くの配列ストアを実行する場合、ひどいパフォーマンスヒットのようです。 C ++には共変配列がないため、このようなランタイムチェックを行う必要はありません。つまり、パフォーマンスが低下することはありません。 必要なランタイムチェックの数を減らすために行われた分析はありますか?たとえば、私が言う場合: arr[1] = arr[0]; ストアが失敗することはないと主張することができます。私が考えていない他の多くの可能な最適化があると確信しています。 最新のコンパイラーは実際にこの種の最適化を行いますか、または、例えばクイックソートが常にO(n log n)の不要なランタイムチェックを行うという事実に耐えなければなりませんか? 現代のオブジェクト指向言語は、共変配列をサポートすることによって生じるオーバーヘッドを回避できますか?
40 c#  java  c++  d 

11
例外のないC ++の実際のケースはありますか?[閉まっている]
ではCの上にC ++、およびC ++の上にCを使用する場合は?ステートメントがあります。コードサイズ/ C ++例外: ジェリーの回答(他の点の中でも): (...)C ++で本当に小さな実行可能ファイルを生成することはより困難になる傾向があります。本当に小さなシステムでは、とにかく大量のコードを書くことはめったにありませんし、余分な(...) なぜそうなるのかを尋ねたところ、ジェリーは答えました。 主なことは、C ++には例外処理が含まれていることです(少なくとも通常は)実行可能ファイルのサイズに最小値が追加されます。ほとんどのコンパイラでは例外処理を無効にできますが、結果を実行するとC ++になりません。(...) 技術的な現実世界のレベルで私は本当に疑っていません。 したがって、プロジェクトが言語としてC ++を選択し、例外を無効にすることを選択した実世界の例を聞くことに興味があります(純粋に好奇心から)。(ユーザーコードで単に例外を「使用しない」だけでなく、コンパイラーで例外を無効にして、例外をスローまたはキャッチできないようにします。)プロジェクトがそうすることを選択した理由例外)-(技術的な)理由は何ですか? 補遺:回答を詳しく説明したい場合は、例外なしの意味がどのように処理されるかを詳しく説明するとよいでしょう。 STLコレクション(vector、...)は正常に動作しません(割り当てエラーは報告できません) new 投げられない コンストラクターが失敗することはありません
40 c++  exceptions 

9
静的メンバー以外のユーティリティクラスはC ++のアンチパターンですか?
クラスに関係のない関数をどこに置くべきかという質問は、C ++でクラス内のユーティリティ関数を結合するのが理にかなっているのか、それとも名前空間にフリー関数として存在するのかという議論を巻き起こしました。 私は、後者のオプションが存在しないC#のバックグラウンドから来ているため、私が書いている小さなC ++コードで静的クラスを使用する傾向があります。しかし、その質問に対する最高の投票された回答といくつかのコメントは、静的なクラスがアンチパターンであることを示唆していても、無料の関数が優先されるべきであると述べています。C ++ではなぜそうなのですか?少なくとも表面的には、クラスの静的メソッドは、名前空間の自由な関数と見分けがつかないように見えます。なぜこのように後者を好むのですか? ユーティリティ関数のコレクションが何らかの共有データを必要とする場合、たとえば、プライベート静的フィールドに保存できるキャッシュなど、状況は異なりますか?

8
C ++では、メモリ管理にプログラマーが費やす時間
ガベージコレクションされた言語に慣れている人は、C ++のメモリ管理が怖いことがよくあります。そこのツールは次のように、あるauto_ptrとshared_ptrそれはあなたのためのメモリ管理タスクの多くを処理します。多くのC ++ライブラリはこれらのツールより前のものであり、メモリ管理タスクを処理する独自の方法があります。 メモリ管理タスクにどれくらいの時間を費やしていますか? 使用するライブラリのセットに大きく依存しているのではないかと思われるので、どのライブラリに答えが当てはまるか、それらが良くなるか悪くなるかを言ってください。
39 c++  memory 

3
Cスタイル言語の論理NOT演算子が「~~」ではなく「!」なのはなぜですか?
二項演算子には、ビット演算子と論理演算子の両方があります。 & bitwise AND | bitwise OR && logical AND || logical OR NOT(単項演算子)の動作は異なります。ビットごとに〜があります!論理的に。 NOTはANDおよびORとは反対の単項演算であると認識していますが、デザイナーがここでシングルがビット単位であり、ダブルが論理的であるという原則から逸脱し、代わりに異なるキャラクターを選んだ理由を考えることはできません。常にオペランド値を返すダブルビット演算のように、間違って読むことができると思います。しかし、それは私にとって本当の問題ではないようです。 行方不明の理由はありますか?
39 java  c#  c++  c 

8
スコープベースのメモリ管理の欠点
スコープベースのメモリ管理(SBMM)、またはRAIIは、C ++コミュニティでより一般的に(混乱して?)参照されるため、私は本当に気に入っています。私が知る限り、C ++(およびC)を除いて、SBMM / RAIIをメインメモリ管理メカニズムとする他の主流の言語は現在使用されておらず、代わりにガベージコレクション(GC)を使用しています。 これはかなりわかりにくい SBMMはプログラムをより決定的にします(オブジェクトがいつ破壊されるかを正確に知ることができます)。 GCを使用する言語では、多くの場合、手動でリソース管理を行う必要があります(たとえば、Javaでファイルを閉じるを参照)。これは、GCの目的を部分的に無効にし、エラーも発生しやすくなります。 ヒープメモリは(非常にエレガントに、imo)スコープにバインドすることもできます(std::shared_ptrC ++を参照)。 SBMMがより広く使用されないのはなぜですか?その短所は何ですか?

4
C ++では、仮想関数はなぜそしてどのように遅いのですか?
誰でも詳細に、仮想テーブルが正確にどのように機能するか、仮想関数が呼び出されたときにどのポインターが関連付けられるかを詳細に説明できますか。 実際に遅い場合、仮想関数の実行にかかる時間が通常のクラスメソッドよりも長いことを示すことができますか?いくつかのコードを見なくても、どのように/何が起こっているのかを簡単に見失うことがあります。

5
C ++で名前空間を使用するためのベストプラクティス[非公開]
ボブおじさんのクリーンコードを数か月前に読みましたが、コードの書き方に大きな影響を与えました。彼がすべてのプログラマーが知っておくべきことを繰り返しているように見えたとしても、それらをすべてまとめて実践することで、コードがずっときれいになります。特に、大きな関数を多くの小さな関数に分割し、大きなクラスを多くの小さなクラスに分割して非常に役立つことを発見しました。 さて、質問です。この本の例はすべてJavaですが、私は過去数年間C ++で働いています。Clean Codeのアイデアは、Javaには存在しない名前空間の使用にどのように拡張されますか?(はい、Javaパッケージについては知っていますが、実際には同じではありません。) それぞれが明確に定義された責任を持つ多くの小さなエンティティを作成するというアイデアを名前空間に適用することは理にかなっていますか?関連するクラスの小さなグループは常に名前空間でラップされるべきですか?これは、多くの小さなクラスを持つ複雑さを管理する方法ですか、それとも多くの名前空間を管理するコストは法外なものでしょうか? 編集:私の質問は、このウィキペディアのPackage Principlesに関するエントリで回答されています。
38 design  c++  namespace 


1
C ++ 11にはstd :: stoiが含まれていますが、std :: itosはどうですか?
C ++ 11にはstd::sto@文字列からints / floats / longsを簡単にアンパックするための関数ファミリーがあることに気がつきました。しかし、その反対が実装されていないことに驚いています。なぜ標準化委員会には、std::itosints / floats / whatever(back)から文字列に戻るための関数ファミリーが含まれていないのですか?
37 c++  parsing  strings  c++11 

8
一時的に含まれるヘッダーに依存することは良い習慣ですか?
私が取り組んでいるC ++プロジェクトのインクルードをクリーンアップしていますが、特定のファイルで直接使用されるすべてのヘッダーを明示的にインクルードする必要があるのか​​、最低限だけインクルードする必要があるのか​​疑問に思っています。 以下に例を示しEntity.hppます。 #include "RenderObject.hpp" #include "Texture.hpp" struct Entity { Texture texture; RenderObject render(); } (の前方宣言RenderObjectはオプションではないと仮定しましょう。) 今、私はそれがRenderObject.hpp含まれていることを知っていますTexture.hpp-私はそれぞれRenderObjectがTextureメンバーを持っているのでそれを知っています。それでも、私は明示的に含めるTexture.hppにはEntity.hpp、それはそれはに含まれているに依存することをお勧めします場合、私はわからないので、RenderObject.hpp。 だから:それは良い習慣ですか?
37 c++  c  headers  include 

16
多くのプログラミング言語の一部を学ぶのは苦痛ですか?
9年生のときにBASICでプログラミングのキャリアを始めました。加算、減算、印刷を行う簡単なプログラムを書くことで、少し基本を学びました。それから私は大学に行き、コンピューター情報とシステム工学を学びました。最初の年に私はCを教えられました。 次に、2年目にC ++を学びました。OOPの知識を教えてくれただけです。今、PHPを(HTMLとともに)実行しています。私はC ++、BASIC、またはPHPをマスターしていません。現在、モバイル開発に移行する予定です。しかし、私は学んだ言語ですべてをカバーしていないと感じています。 それは本当に重要ですか?
37 php  c++  c  basic 

17
プログラミングスキルに自信を持たせるにはどうすればよいですか?[閉まっている]
プログラミングは私にとって異質ではありません。私は最初にマークアップ(HTML、今は笑わないでください)を12歳のときに始め、13歳のときに少しBASICを使いました(この時点でフローチャート、擬似コードについて多くを知っていました)が、その後、高校での生物学。したがって、C、Javaなどの言語の「実際の」プログラミング知識を逃していました。UG BEのCSを取り上げました(BSに似ていますが、より理論的な方法です)。私は自分でCとC ++を(程度は低いが)学びました(私の教授は完全な痛みであり、クラスはコードジョックでいっぱいでした(学校で既に学んでいたため、クラスに注意を払わず、私のようなより低い定命の者にクラスに注意を払わせてください))、素晴らしい加算または乗算プログラム(今では幼稚園児でさえも) 私の主な問題は、限られたプログラミングスキルに常に不十分で首を絞められ、コードジョックに軽視されていることです(信じられませんが、私はこのサイトに何年も前に出会ったことがありますが、実際に投稿する勇気を築くことができただけです)質問)そして、時にはその無能さをめぐってさえ落ち込んでいます。ほとんどの人は、プログラミングは必ずしも言語ではなく、その人の心の状態と問題/問題を解決するために使用する技術に関するものだと言います。私はそのような感情に同意しますが、そのような「心の状態」を獲得することはできますか?そのような場合、「プログラミング/コーディング」にどのようにアプローチする必要があり、「Zen」を達成するための最も設定された方法と手順がある場合コーディング」。どうすればいいですか?また、ある聖人がこの虐げられた$#!^の一部を指導したいと思っても害はありません。 PS私は自分の時間の価値があると考える人に永遠に感謝し、ボーナスとして彼らの後に出荷する私の最初のソフトウェアの名前を付けます。(私が1つを出荷するようになったら、つまり) TL; DR:「プログラミング/コーディング」を実際に学んだことはありません。私が試みても問題を解決できません。助けて!

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