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

C ++は汎用プログラミング言語です。もともとCの拡張として設計され、構文は似ていますが、現在は完全に異なる言語になっています。このタグは、C ++コンパイラでコンパイルされる(される)コードに関する質問に使用します。特定の標準リビジョン[C ++ 11]、[C ++ 14]、[C ++ 17]または[C ++ 20]などに関連する質問には、バージョン固有のタグを使用します。



9
いつ、なぜコンパイラはmalloc / free / new / deleteでメモリを0xCD、0xDDなどに初期化しますか?
コンパイラが、0xCDやなどの特定のパターンでメモリを初期化する場合があることを知ってい0xDDます。私が知りたいのは、いつ、なぜこれが起こるのかということです。 いつ これは使用するコンパイラに固有ですか? やるmalloc/newとfree/deleteこれに関連して同じように動作しますか? プラットフォーム固有ですか? Linuxまたはなどの他のオペレーティングシステムで発生しVxWorksますか? なぜ 私の理解では、これはWin32デバッグ構成でのみ発生し、メモリオーバーランを検出し、コンパイラが例外をキャッチするのに役立ちます。 この初期化がどのように役立つかについて、実用的な例を挙げていただけますか? 割り当て時にメモリを既知のパターンに初期化することをお勧めします(コードコンプリート2で)何かを読んだことを覚えていWin32ます。特定のパターンは割り込みをトリガーし、デバッガーに例外が表示されます。 これはどれほどポータブルですか?

4
C ++での「const」の使用法はいくつですか。
初心者のC ++プログラマーとして、私にはまだ非常に不明瞭に見えるいくつかの構造体がありますconst。これらの1つはです。あなたはそれを非常に多くの場所で使用することができ、初心者が生き返ることがほとんど不可能である非常に多くの異なる効果があります。一部のC ++の達人は、さまざまな使用法、およびそれらを使用しないかどうか、および/または使用しない理由を永久に一度説明しますか?
129 c++  const 


8
operator <<は、フレンド関数またはメンバー関数として実装する必要がありますか?
それは基本的に問題です、実装する「正しい」方法はありoperator&lt;&lt;ますか?これを読むと、次のようなことがわかります。 friend bool operator&lt;&lt;(obj const&amp; lhs, obj const&amp; rhs); のようなものよりも好ましい ostream&amp; operator&lt;&lt;(obj const&amp; rhs); しかし、なぜどちらを使用する必要があるのか​​、私にはよくわかりません。 私の個人的なケースは: friend ostream &amp; operator&lt;&lt;(ostream &amp;os, const Paragraph&amp; p) { return os &lt;&lt; p.to_str(); } しかし、おそらく私はできるでしょう: ostream &amp; operator&lt;&lt;(ostream &amp;os) { return os &lt;&lt; paragraph; } この決定の根拠となる根拠は何ですか? 注: Paragraph::to_str = (return paragraph) ここで、段落は文字列です。


30
列挙型変数を文字列に変換する方法は?
enum型の変数の値を表示するようにprintfを作成するにはどうすればよいですか?例えば: typedef enum {Linux, Apple, Windows} OS_type; OS_type myOS = Linux; そして私が必要なのは printenum(OS_type, "My OS is %s", myOS); 整数ではなく文字列「Linux」を表示する必要があります。 まず、値のインデックスが付けられた文字列の配列を作成する必要があると思います。しかし、それが最も美しい方法かどうかはわかりません。まったく可能ですか?
128 c++  c  preprocessor  ansi-c 


10
ポインター式:* ptr ++、* ++ ptrおよび++ * ptr
最近、自分では理解できないこの問題に遭遇しました。 これらの3つの表現は本当に何ですか意味するのでしょうか? *ptr++ *++ptr ++*ptr リッチーを試しました。しかし、残念ながら、彼はこれらの3つの操作について彼が言ったことを追跡することができませんでした。 それらはすべて、ポインタ/ポイントされた値をインクリメントするために実行されることを知っています。評価の優先順位や順序についても多くのことがあると思います。最初にポインターをインクリメントしてからそのポインターのコンテンツをフェッチするように、単純にコンテンツをフェッチしてからポインターをインクリメントするなどです。ご覧のとおり、実際の操作について明確に理解していません。できるだけ早くクリアしてください。しかし、それらをプログラムに適用する機会を得たとき、私は本当に迷っています。例えば: int main() { const char *p = "Hello"; while(*p++) printf("%c",*p); return 0; } 私にこの出力を与えます: ello しかし、私の期待はそれが印刷されることでしたHello。最後の1つのリクエスト-特定のコードスニペットで各式がどのように機能するかの例を教えてください。ほとんどの場合、理論のほんの一部だけが私の頭の上を飛んでいきます。
128 c++  c  pointers  increment 

2
関数の見出しにある矢印演算子(->)
私は次のコードに出くわしました: template &lt;typename T, typename T1&gt; auto compose(T a, T1 b) -&gt; decltype(a + b) { return a+b; } 理解できないことが1つあります。 -&gt;関数の見出しで矢印演算子()が何を意味するかはどこで確認できますか?純粋に論理的には、-&gt;演算子が型を決定し、それautoが推定されると思いますが、これをまっすぐに取得したいと思います。情報が見つかりません。
128 c++  c++11  auto  decltype 

12
削除してもポインタがNULLに設定されないのはなぜですか?
削除後のポインタのNULLへの自動設定が標準の一部ではないのはなぜかといつも疑問に思いました。これが処理されれば、無効なポインタによるクラッシュの多くは発生しません。しかし、標準がこれを制限していたいくつかの理由を考えることができると言いましたが: パフォーマンス: 追加の命令により、deleteパフォーマンスが低下する可能性があります。 constポインタのせいかもしれません。 そして、スタンダードはこの特別なケースのために何かをしたかもしれません。 これを許可しない正確な理由を誰かが知っていますか?

7
C / C ++でサイズ0の配列を定義するとどうなりますか?
int array[0];コードで長さゼロの配列を定義すると、実際にはどうなりますか?GCCはまったく文句を言いません。 サンプルプログラム #include &lt;stdio.h&gt; int main() { int arr[0]; return 0; } 明確化 私は実際に、Darhazerのコメントの可変長のように指されるのではなく、このように初期化された長さゼロの配列が最適化されているかどうかを把握しようとしています。 これは、一部のコードを実際にリリースする必要があるため、SIZEがとして定義されているケースを処理する必要があるかどうかを判断しようとし0ています。int array[SIZE]; 私は実際にGCCが文句を言わないことに驚き、それが私の質問につながりました。私が受け取った回答から、警告がないのは、新しい[]構文で更新されていない古いコードをサポートしていることが主な原因であると思います。 私は主にエラーについて疑問に思っていたので、Lundinの答えに正しいタグを付けています(Nawazの答えが最初でしたが、完全ではありませんでした)。 tまさに私が探していたもの。
127 c++  c  arrays 

9
C ++でのTrigraphシーケンスの目的?
C ++ '03 Standard 2.3 / 1によると: 他の処理が行われる前に、以下の3つの文字のシーケンス(「3文字表記シーケンス」)が出現するたびに、表1に示されている単一の文字に置き換えられます。 ---------------------------------------------------------------------------- | trigraph | replacement | trigraph | replacement | trigraph | replacement | ---------------------------------------------------------------------------- | ??= | # | ??( | [ | ??&lt; | { | | ??/ | \ | ??) | ] | ??&gt; | } | | …
127 c++  c++03  trigraphs 

11
誰がC ++のIOStreamsを設計/設計しましたか?それでも、今日の標準では十分に設計されていると見なされますか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 2年前休業。 この質問を改善する まず第一に、私は主観的な意見を求めているように見えるかもしれませんが、それは私が求めているものではありません。このトピックに関する根拠のある議論を聞いてみたいです。 最近のストリーム/シリアライゼーションフレームワークがどのように設計されるべきかについて洞察を得ることを期待して、私は最近、Angelika LangerとKlaus Kreftによる本「Standard C ++ IOStreams and Locales」のコピーを手に入れました。私は、IOStreamsが適切に設計されていなければ、そもそもC ++標準ライブラリに組み込まれていないと考えました。 この本のさまざまな部分を読んだ後、IOStreamsが全体的なアーキテクチャの観点からのSTLなどと比較できるかどうか疑問になり始めています。たとえば、アレクサンダーステパノフ(STLの「発明者」)とのこのインタビューを読んで、STLに入った設計上の決定について学びます。 特に私を驚かせるもの: IOStreamsの全体的な設計の責任者は誰なのかは不明のようです(これについての背景情報をいくつか読みたいと思います。誰かが良いリソースを知っていますか?)。 あなたは、あなたがあなた自身のクラスとの入出力ストリームを拡張したい場合、あなたはかなり不可解とメンバ関数名を混乱とのインタフェースを取得入出力ストリームの直接の表面、例えば下に掘り下げ例えば一度getloc/ imbue、uflow/ underflow、snextc/ sbumpc/ sgetc/ sgetn、pbase/ pptr/ epptr(とそこのおそらくさらに悪い例)。これにより、全体的な設計と単一の部品がどのように連携するかを理解することが非常に難しくなります。私は上記でさえ本は助けにならないことくらい(私見)。 したがって、私の質問: あなたは(実際には存在している場合、今日のソフトウェアエンジニアリングの基準で判断しなければならなかった場合であるこれらの任意の一般的な合意が)、うC ++の入出力ストリームは、まだうまく設計されたとみなされますか?(ソフトウェアの設計スキルを、一般的に古いと考えられているものから改善したくありません。)
127 c++  iostream 

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