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

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

1
libc ++のvector <bool> :: const_referenceがboolではないのはなぜですか?
セクション23.3.7クラスvector&lt;bool&gt;[vector.bool]、パラグラフ1は次のように述べています。 template &lt;class Allocator&gt; class vector&lt;bool, Allocator&gt; { public: // types: typedef bool const_reference; ... ただし、libc ++を使用すると、このプログラムはコンパイルに失敗します。 #include &lt;vector&gt; #include &lt;type_traits&gt; int main() { static_assert(std::is_same&lt;std::vector&lt;bool&gt;::const_reference, bool&gt;{}, "?"); } さらに、C ++標準はこの仕様でC ++ 98までずっと一貫していることに注意します。また、libc ++が最初に導入されて以来、libc ++はこの仕様に一貫して準拠していないことにも注意してください。 この不適合の動機は何ですか?

7
const_castは安全ですか?
に関する情報があまり見つかりませんconst_cast。(Stack Overflowで)私が見つけた唯一の情報は次のとおりです。 const_cast&lt;&gt;()/変数の削除CONST(ネス)(又は揮発性らしさ)を追加するために使用されます。 これは私を緊張させます。const_cast原因の予期しない動作を使用できますか?もしそうなら、何ですか? または、いつ使用しても大丈夫const_castですか?

1
どういう意味?
私には2つのクラスがあります。 class base { virtual void foo() {}; }; class derived : public base { void foo() { base::foo(); } }; 私はミスを犯したと書いたbase:foo();の代わりにbase::foo();。コードはコンパイルされて実行されましたが、segfaultedでした。 どうすればGoogleでそれをGoogleにできるかわからないし、それが何かはわかりませんが、とても興味があります。それはどういう意味ですか? base:foo(); それが重要な場合: class base : public QAbstractGraphicsShapeItem
92 c++  syntax 

6
C ++が匿名の構造体を許可しないのはなぜですか?
一部のC ++コンパイラーは、匿名の共用体と構造体を標準C ++の拡張として許可します。これは、時々非常に役立つ、ちょっとした構文上の砂糖です。 これが標準の一部にならないようにする根拠は何ですか?技術的な障害はありますか?哲学的なもの?それともそれを正当化する必要性が十分ではないのですか? これが私が話していることのサンプルです: struct vector3 { union { struct { float x; float y; float z; }; float v[3]; }; }; 私のコンパイラはこれを受け入れますが、「無名の構造体/共用体」はC ++に対する非標準の拡張であることを警告しています。
92 c++  struct  unions 

12
ポインター宣言でのアスタリスクの配置
私は最近、C / C ++を最終的に習得する必要があると最近決定しました。ポインタについて、またはより正確には、その定義について、私が本当に理解していないことが1つあります。 これらの例はどうですか: int* test; int *test; int * test; int* test,test2; int *test,test2; int * test,test2; さて、私の理解では、最初の3つのケースはすべて同じことをしています:Testはintではなく、1へのポインターです。 2番目の例のセットは、もう少しトリッキーです。ケース4では、testとtest2の両方がintへのポインターですが、ケース5ではtestのみがポインターですが、test2は「実際の」intです。ケース6はどうですか?ケース5と同じ?
92 c++  c  pointers  declaration 

5
libstdc ++。so.6:共有オブジェクトファイルを開けません:そのようなファイルまたはディレクトリはありません
Cilk ++プログラムでCilkscreenコマンドを実行したいのですが、このエラーが発生します /usr/local/cilk/bin/../lib32/pinbin:共有ライブラリのロード中にエラーが発生しました:libstdc ++。so.6:共有オブジェクトファイルを開けません:そのようなファイルまたはディレクトリはありません 手伝ってくれませんか
92 c++  cilk  cilk-plus 


3
C ++では、型情報はいつ逆方向に流れますか?
私はちょうどでステファンT. Lavavejトークを見CppCon 2018に「クラステンプレート引数控除」、上のいくつかの点彼はついでに言います: C ++の型情報は、逆方向に流れることはほとんどありません... 1つまたは2つのケースがあるため、「ほとんど」と言わざるを得ませんでした。 彼がどのケースを参照しているのかを理解しようとしたにもかかわらず、私は何も思いつきませんでした。したがって、質問: C ++ 17標準では、その型情報が逆伝播するように義務付けられているのはどの場合ですか?

2
C ++ 11ラムダ実装とメモリモデル
C ++ 11クロージャーについて正しく考える方法とstd::function、それらがどのように実装され、メモリーがどのように処理されるかという点について、いくつかの情報が欲しいのですが。 私は時期尚早の最適化を信じていませんが、私は新しいコードを書くときに自分の選択がパフォーマンスに与える影響を慎重に検討する習慣があります。また、マイクロコントローラーやオーディオシステムなど、非決定的なメモリ割り当て/割り当て解除の一時停止を回避するために、かなりの量のリアルタイムプログラミングを行っています。 したがって、C ++ラムダをいつ使用するか、または使用しないかについての理解を深めたいと思います。 私の現在の理解では、キャプチャされたクロージャのないラムダは、Cコールバックとまったく同じです。ただし、環境が値または参照によってキャプチャされると、匿名オブジェクトがスタックに作成されます。関数から値のクロージャを返す必要がある場合は、それをでラップしstd::functionます。この場合、クロージャメモリはどうなりますか?スタックからヒープにコピーされますか?が解放されるたびに解放されますか?std::functionつまり、aのように参照カウントされstd::shared_ptrますか? リアルタイムシステムでラムダ関数のチェーンをセットアップし、Bを継続引数としてAに渡して、処理パイプラインA-&gt;Bが作成されると思います。この場合、AクロージャーとBクロージャーは一度割り当てられます。これらがスタックとヒープのどちらに割り当てられるかはわかりませんが。ただし、一般的に、これはリアルタイムシステムで安全に使用できます。一方、Bがラムダ関数Cを作成してそれが返す場合、Cのメモリは繰り返し割り当てと割り当て解除が行われ、リアルタイムの使用には受け入れられません。 疑似コードでは、DSPループはリアルタイムで安全になると思います。ブロックAを処理してからBを処理したいのですが、Aは引数を呼び出します。これらの関数は両方ともstd::functionオブジェクトを返すのでf、std::functionオブジェクトは、環境がヒープに格納されます。 auto f = A(B); // A returns a function which calls B // Memory for the function returned by A is on the heap? // Note that A and B may maintain a state // via mutable value-closure! for (t=0; t&lt;1000; …
92 c++  memory  lambda  c++11 

21
vector <int>を文字列に変換します
私はvector&lt;int&gt;整数を有する容器(例えば、{1,2,3,4})とIは、フォームの文字列に変換したいです "1,2,3,4" C ++でこれを行う最もクリーンな方法は何ですか?Pythonでは、これは私がそれをする方法です: &gt;&gt;&gt; array = [1,2,3,4] &gt;&gt;&gt; ",".join(map(str,array)) '1,2,3,4'
92 c++  vector  tostring 

2
list <T>オブジェクトを別のオブジェクトに追加する方法
C ++では、2つのlist&lt;T&gt;オブジェクトがAありB、のすべてのメンバーBをの末尾に追加したいと思いAます。いくつかのソースを検索しましたが、簡単な解決策(ei A.append(B);)が見つかりませんでした。 これを行う最良の方法は何ですか? たまたま、私はこの後Bは気にしません(次の行で削除されます)ので、より良いパフォーマンスのためにそれを活用する方法があれば、私もそれに興味があります。
92 c++  list  stl 

4
一部のコンパイラーが同一の文字列リテラルに同じアドレスを使用するのはなぜですか?
https://godbolt.org/z/cyBiWY 'some'MSVCによって生成されたアセンブラコードで2つのリテラルを確認できますが、clangとgccを使用するリテラルは1つだけです。これにより、コード実行の結果がまったく異なります。 static const char *A = "some"; static const char *B = "some"; void f() { if (A == B) { throw "Hello, string merging!"; } } 誰かがそれらのコンパイル出力の違いと類似点を説明できますか?最適化が要求されていないのに、clang / gccが何かを最適化するのはなぜですか?これはある種の未定義の動作ですか? また、宣言を以下に示すように変更すると、clang / gcc / msvcはアセンブラー"some"コードに何も残さないことに気づきました。なぜ動作が異なるのですか? static const char A[] = "some"; static const char B[] = "some";

7
C ++で例外がスローされた場所を見つけるにはどうすればよいですか?
どこかでキャッチされない例外をスローするプログラムがあります。私が受け取るのは、例外がスローされたというレポートであり、例外がスローされた場所に関する情報はありません。デバッグシンボルを含むようにコンパイルされたプログラムが、コードのどこで例外が生成されたかを通知しないのは、非論理的です。 gdbで 'catch throw'を設定し、スローされたすべての例外に対してバックトレースを呼び出す以外に、私の例外がどこにあるのかを知る方法はありますか?

3
ベクトルが大きくなったときに移動セマンティクスを強制する方法は?
std::vectorあるクラスのオブジェクトを持っていますA。クラスは自明ではなく、コピーコンストラクターと移動コンストラクターが定義されています。 std::vector&lt;A&gt; myvec; ベクターをAオブジェクトで(たとえばを使用してmyvec.push_back(a))埋めると、コピーコンストラクターA( const A&amp;)を使用してベクターの要素の新しいコピーをインスタンス化し、ベクターのサイズが大きくなります。 A代わりに、クラスの移動コンストラクタが代わりに使用されていることを強制できますか?

6
テンプレートクラスからの単一メソッドのテンプレート特殊化
テンプレートクラスを含む次のヘッダーが少なくとも2つの.CPPファイルに含まれていることを常に考慮して、このコードは正しくコンパイルされます。 template &lt;class T&gt; class TClass { public: void doSomething(std::vector&lt;T&gt; * v); }; template &lt;class T&gt; void TClass&lt;T&gt;::doSomething(std::vector&lt;T&gt; * v) { // Do something with a vector of a generic T } template &lt;&gt; inline void TClass&lt;int&gt;::doSomething(std::vector&lt;int&gt; * v) { // Do something with a vector of int's } ただし、特殊化メソッドのインラインに注意してください。メソッドが複数回定義されているため、リンカエラー(VS2008ではLNK2005)を回避する必要があります。AFAIKの完全なテンプレート特殊化は単純なメソッド定義と同じであるため、私はこれを理解しています。 …

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