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

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

12
C ++タプルと構造体
std::tupleとデータのみの使用に違いはありstructますか? typedef std::tuple<int, double, bool> foo_t; struct bar_t { int id; double value; bool dirty; } 私がオンラインで見つけたものから、2つの大きな違いがあることがわかりました。1つstructは読みやすく、もう1つはtuple使用できる多くの汎用関数を持っていることです。パフォーマンスに大きな違いはありますか?また、データレイアウトは相互に互換性がありますか(交換可能にキャストされます)?
95 c++  struct  tuples 

4
明示的なテンプレートのインスタンス化-いつ使用されますか?
数週間の休憩の後、私は本「テンプレート-デビッドヴァンデヴォーデとニコライM.ジョスティスによる完全ガイド」でテンプレートの知識を拡大および拡張しようとしています。現時点で理解しようとしているのは、テンプレートの明示的なインスタンス化です。 。 メカニズム自体には問題はありませんが、この機能を使いたい、あるいは使いたいという状況は想像できません。誰かが私にそれを説明することができれば、私はもっと感謝するでしょう。
95 c++  templates 


6
C ++でのセグメンテーション違反の修正
私はWindowsとUnix用のクロスプラットフォームC ++プログラムを書いています。ウィンドウ側では、コードは問題なくコンパイルおよび実行されます。Unix側ではコンパイルされますが、実行しようとするとセグメンテーション違反が発生します。私の最初の予感は、ポインタに問題があるということです。 セグメンテーション違反エラーを見つけて修正するための良い方法は何ですか?

4
shared_ptr <Derived>をshared_ptr <Base>として渡す
shared_ptr派生型shared_ptrのaを基本型のaを取る関数に渡すための最良の方法は何ですか? shared_ptr不必要なコピーを避けるために、私は通常、参照によってsを渡します。 int foo(const shared_ptr&lt;bar&gt;&amp; ptr); しかし、私が次のようなことをしようとすると、これは機能しません int foo(const shared_ptr&lt;Base&gt;&amp; ptr); ... shared_ptr&lt;Derived&gt; bar = make_shared&lt;Derived&gt;(); foo(bar); 使用できます foo(dynamic_pointer_cast&lt;Base, Derived&gt;(bar)); しかし、これは2つの理由で最適ではないようです。 Aはdynamic_cast、単純なため、過剰なビットが得ツーベースキャストようです。 私が理解しているdynamic_pointer_castように、関数に渡すポインターのコピー(一時的なものではありますが)を作成します。 より良い解決策はありますか? 後世のための更新: ヘッダーファイルがないという問題であることが判明しました。また、ここで私がやろうとしていたことは、アンチパターンと見なされます。一般的に、 オブジェクトの存続期間に影響を与えない(つまり、オブジェクトが関数の期間中有効である)関数は、単純な参照またはポインターを使用する必要がありますint foo(bar&amp; b)。 オブジェクトを消費する関数(つまり、特定のオブジェクトの最終ユーザー)は、unique_ptrby値を取る必要がありますint foo(unique_ptr&lt;bar&gt; b)。呼び出し元はstd::move、関数に値を入力する必要があります。 オブジェクトの存続期間を延長する関数はshared_ptr、値をとる必要がありますint foo(shared_ptr&lt;bar&gt; b)。循環参照を避けるための通常のアドバイスが適用されます。 詳細については、ハーブサッターの「基本に立ち返る」の話を参照してください。

8
「ダブルフリーまたは破損」エラーを追跡する方法
(C ++)プログラムを実行すると、このエラーでクラッシュします。 * glibcが検出されました*。 / load:ダブルフリーまたは破損(!prev):0x0000000000c6ed50 *** エラーを追跡するにはどうすればよいですか? print(std::cout)ステートメントを使用しようとしましたが、成功しませんでした。でしたgdbこれを簡単にしますか?
95 c++  c  debugging  free 

3
Constexprとマクロ
マクロの使用をどこで好むべきで、constexprをどこで好むべきですか?基本的に同じではないですか? #define MAX_HEIGHT 720 vs constexpr unsigned int max_height = 720;
95 c++  c++11  macros  constexpr 

2
「C ++プログラミング言語」第4版のセクション36.3.6のこのコードには、明確に定義された動作がありますか?
Bjarne StroustrupのC ++プログラミング言語の第4版セクションの36.3.6 STLに似た操作では、次のコードがチェーンの例として使用されています。 void f2() { std::string s = "but I have heard it works even if you don't believe in it" ; s.replace(0, 4, "" ).replace( s.find( "even" ), 4, "only" ) .replace( s.find( " don't" ), 6, "" ); assert( s == "I have heard it works …


17
関数ポインタのポイントは何ですか?
関数ポインタの有用性がわかりません。場合によっては(おそらく存在しますが)役立つと思いますが、関数ポインターを使用する方が良い場合や避けられない場合は考えられません。 (CまたはC ++での)関数ポインタの適切な使用例をいくつか教えてください。
94 c++  c  function  pointers  c++-faq 

2
C ++でBoostを使用したUUID生成の例
私のプログラムのインスタンスが一意の識別子を持つことが重要であるため、ランダムなUUIDのみを生成します。Boost UUIDを調べましたが、使用するクラスとメソッドがわからないため、UUIDを生成できません。 誰かがこれを達成する方法の例を教えてもらえれば幸いです。
94 c++  boost  uuid  boost-uuid 

7
0と-0を区別することは可能ですか?
整数値0と-0は基本的に同じであることを知っています。しかし、それらを区別することは可能かどうか疑問に思っています。 たとえば、変数が割り当てられた-0かどうかはどうすればわかりますか? bool IsNegative(int num) { // How ? } int num = -0; int additinon = 5; num += (IsNegative(num)) ? -addition : addition; -0メモリに保存された値はとまったく同じ方法0ですか?

8
検索結果が見つからない場合は「NULL」オブジェクトを返します
私はC ++にかなり慣れていないので、学んでいる間、多くのJava主義で設計する傾向があります。とにかく、Javaでは、特定のパラメーターに一致するTからオブジェクトを返す 'search'メソッドを含むクラスがあるCollection&lt; T &gt;場合、そのオブジェクトを返しnullます。オブジェクトがコレクション内に見つからなかった場合は、を返します。次に、私の呼び出し関数でチェックするだけですif(tResult != null) { ... } C ++では、nullオブジェクトが存在しないと値を返せないことがわかりました。オブジェクトが見つからなかったことを呼び出し元の関数に通知するタイプTの「インジケーター」を返したいだけです。例外的な状況ではないので、例外を投げたくありません。 これは私のコードが今どのように見えるかです: class Node { Attr&amp; getAttribute(const string&amp; attribute_name) const { //search collection //if found at i return attributes[i]; //if not found return NULL; // what should this be? } private: vector&lt;Attr&gt; attributes; } どのように変更すれば、そのようなマーカーを付けることができますか?

2
参照または値によってスマートポインター(shared_ptr)を返す方法は?
を返すメソッドを持つクラスがあるとしますshared_ptr。 参照または値によってそれを返すことの考えられる利点と欠点は何ですか? 2つの考えられる手がかり: オブジェクトの早期破壊。shared_ptrby(const)参照を返す場合、参照カウンターは増分されないため、別のコンテキスト(たとえば、別のスレッド)でスコープから外れると、オブジェクトが削除されるリスクがあります。これは正しいです?環境がシングルスレッドの場合、この状況も発生する可能性がありますか? 費用。値渡しは確かに無料ではありません。可能な限り回避する価値はありますか? みんなありがとう。

10
C ++クラスのメモリ構造に「スペーサー」を作成するにはどうすればよいですか?
問題 ローレベルベアメタル埋め込みコンテキスト、私はそのようなアクセスメモリ位置にユーザを禁止するために、C ++構造内の任意の名前なしで、メモリ内の余白を作成したいです。 現在、私はuint32_t :96;3ワードの代わりになる醜いビットフィールドを配置することでそれを達成しましたが、GCC(ビットフィールドが大きすぎてuint32_tに収まらない)から警告が出されます。これはかなり合法です。 正常に動作しますが、数百の警告が含まれるライブラリを配布する場合は、それほどクリーンではありません... どうすれば適切に実行できますか? そもそもなぜ問題があるのですか? 私が取り組んでいるプロジェクトは、マイクロコントローラーライン全体(STMicroelectronics STM32)のさまざまな周辺機器のメモリ構造を定義することです。そうするために、結果は、対象となるマイクロコントローラーに応じて、すべてのレジスターを定義するいくつかの構造体の結合を含むクラスです。 非常に単純なペリフェラルの簡単な例は次のとおりです。汎用入出力(GPIO) union { struct { GPIO_MAP0_MODER; GPIO_MAP0_OTYPER; GPIO_MAP0_OSPEEDR; GPIO_MAP0_PUPDR; GPIO_MAP0_IDR; GPIO_MAP0_ODR; GPIO_MAP0_BSRR; GPIO_MAP0_LCKR; GPIO_MAP0_AFR; GPIO_MAP0_BRR; GPIO_MAP0_ASCR; }; struct { GPIO_MAP1_CRL; GPIO_MAP1_CRH; GPIO_MAP1_IDR; GPIO_MAP1_ODR; GPIO_MAP1_BSRR; GPIO_MAP1_BRR; GPIO_MAP1_LCKR; uint32_t :32; GPIO_MAP1_AFRL; GPIO_MAP1_AFRH; uint32_t :64; }; struct { uint32_t :192; GPIO_MAP2_BSRRL; GPIO_MAP2_BSRRH; uint32_t …

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