問題タブ [c++-faq]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - C ++での適切なスタックとヒープの使用?
私はしばらくプログラミングをしていますが、ほとんどが Java と C# です。実際に自分でメモリを管理する必要はありませんでした。私は最近 C++ でプログラミングを始めましたが、スタックに格納するタイミングとヒープに格納するタイミングについて少し混乱しています。
私の理解では、非常に頻繁にアクセスされる変数はスタックとオブジェクトに格納する必要があり、めったに使用されない変数、および大きなデータ構造はすべてヒープに格納する必要があります。これは正しいですか、それとも間違っていますか?
c++ - 「template」および「typename」キーワードをどこに、なぜ配置する必要があるのですか?
typename
テンプレートでは、template
依存する名前を配置する必要がある場所と理由は?
とにかく、従属名とは正確には何ですか?
次のコードがあります。
私が抱えている問題はtypedef Tail::inUnion<U> dummy
ラインにあります。私はそれinUnion
が従属名であることをかなり確信しており、VC++ はそれを窒息させているのはまったく正しいことです。また、inUnion がテンプレート ID であることをコンパイラーに伝えるためにどこかに
追加できるはずであることもわかっています。template
しかし、正確にはどこですか?そして、inUnion がクラス テンプレートである、つまりinUnion<U>
、関数ではなく型の名前を付けていると想定する必要がありますか?
c++ - 型名の後の括弧は new と違いますか?
「テスト」が通常のクラスの場合、以下の間に違いはありますか:
と
c++ - クラス間の循環依存によるビルドエラーを解決します
いくつかの悪い設計上の決定(他の誰かによって行われた:))が原因でC ++プロジェクトで複数のコンパイル/リンカーエラーに直面している状況に陥ることがよくあります。これは、異なるヘッダーファイルのC ++クラス間の循環依存につながります(これも発生する可能性があります)同じファイル内)。しかし、幸いなことに(?)これは、次に再び発生するときにこの問題の解決策を思い出すのに十分な頻度では発生しません。
ですから、将来簡単に思い出せるように、代表的な問題と解決策を一緒に投稿します。もちろん、より良い解決策は大歓迎です。
/li>A.h
/li>B.h
/li>main.cpp
c++ - 「これ」が参照ではなくポインタであるのはなぜですか?
私はこの質問C++ の長所と短所への回答を読んでいて、コメントを読んでいるときにこの疑問を抱きました。
プログラマは、"this" が参照ではなくポインタであることに混乱を覚えることがよくあります。別の混乱は、「hello」が std::string 型ではなく、char const* (ポインター) に評価される理由です (配列からポインターへの変換後)
それは、他の(後の)言語と同じ規則を使用していないことを示しているだけです。— ルドルフィエ
ただし、「これ」のことはかなり些細な問題と言えます。おっと、未定義の動作の例でいくつかのエラーを見つけてくれてありがとう。:)サイズに関する情報が最初のものと関係があるかどうかはわかりませんが。ポインターは、割り当てられたメモリの外側を指すことは単に許可されていません
これは一定のポインターですか?– yesraaj 22 12月. 082008-12-22 06:35
メソッドが const int getFoo() const の場合、これは定数になります。<- getFoo のスコープでは、「this」は定数であるため、読み取り専用です。これにより、バグが防止され、オブジェクトが変更されないという一定レベルの保証が呼び出し元に提供されます。— ダグ T. 22 12 月 2008 〜で 16:42 に
「これ」を再割り当てすることはできません。つまり、これは右辺値であるため、"this = &other;" を実行することはできません。しかし、これは T* 型であり、 T const 型ではありません。つまり、これは非定数ポインターです。const メソッドを使用している場合は、const へのポインターです。T const 。しかし、ポインター自体は非定数です — ヨハネス・シャウブ
"this" は次のように考えてください: #define this (this_ + 0) ここで、コンパイラは "this_" をオブジェクトへのポインターとして作成し、"this" をキーワードにします。(this_ + 0) は右辺値であるため、「this」を割り当てることはできません。もちろん、それはそうではありませんが(そのようなマクロはありません)、それを理解するのに役立ちます
私の質問は、なぜthis
ポインターが参照ではないのですか? それをポインタにする特定の理由はありますか?
this
参照であることが理にかなっている理由について、さらにいくつかの議論があります。
Item 1
fromを考慮してくださいMore Effective C++
:有効なオブジェクト、つまりNULLではないことが保証されている場合は参照を使用してください(私の解釈)。- さらに、参照はポインターよりも安全であると見なされます (漂遊ポインターでメモリーを台無しにすることはできないため)。
- 第 3 に、参照にアクセスするための構文 ( ) は、ポインターにアクセスするための構文 (または)
.
よりも少し適切で短いです。->
(*)
c++ - クラスデータメンバへのポインタ "::*"
正常にコンパイルされるこの奇妙なコードスニペットに出くわしました:
C++ がクラスの非静的データ メンバへのポインタを持っているのはなぜですか? 実際のコードでこの奇妙なポインターを使用するのは何ですか?
c++ - クラスの関数宣言の最後にある「const」の意味は?
const
このような宣言の意味は何ですか?const
混乱します。
c++ - C++ 参照変数を返すのは悪ですか?
これは少し主観的だと思います。意見が満場一致になるかどうかはわかりません (参照が返される多くのコード スニペットを見てきました)。
私が今尋ねたこの質問に対するコメントによると、参照の初期化に関して、参照を返すことは悪になる可能性があります.[私が理解しているように]削除を見逃しやすくなり、メモリリークにつながる可能性があるためです。
私は例に従って(想像していない限り)、かなりの数の場所でこれを行ったので、これは私を心配しています...誤解しましたか?それは悪ですか?もしそうなら、どれほど邪悪ですか?
ポインターと参照が入り混じったバッグと、C++ を初めて使用するという事実、およびいつ何を使用するかについて完全に混乱しているため、私のアプリケーションはメモリ リーク地獄に違いないと感じています...
また、メモリ リークを回避する最善の方法として、スマート/共有ポインタを使用することが一般的に受け入れられていることも理解しています。
c++ - C++ での循環シフト (回転) 操作のベスト プラクティス
左シフト演算子と右シフト演算子 (<< と >>) は C++ で既に使用できます。ただし、循環シフトまたは回転操作を実行する方法がわかりませんでした。
「左に回転」「右に回転」などの操作はどのように実行できますか?
ここで右に2回転
結果は次のようになります。
例が役に立ちます。
(編集者注: C で回転を表現する一般的な方法の多くは、回転カウントがゼロの場合、または単一の回転マシン命令以上にコンパイルされた場合、未定義の動作に悩まされます。この質問の回答は、ベスト プラクティスを文書化する必要があります。)
c++ - プライベート、パブリック、保護された継承の違い
C++
public
の、private
、およびprotected
継承の違いは何ですか?
SOで見つけたすべての質問は、特定のケースを扱っています。