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

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

2
これは何ですか (( ))?
gccコンパイラのソースコード(gcc / c-family / c-pragma.c)を参照すると、次のようになります。 typedef struct GTY(()) align_stack { int alignment; tree id; struct align_stack * prev; } align_stack; 何年も前にCプログラミングをたくさん行っていても、これらのビット(())はまだ完全に不明です。誰かがそれらの意味を説明できますか?グーグルはそれを見つけていないようです。
90 c++  c 

16
i ++はスレッドセーフではないと聞きましたが、++ iはスレッドセーフですか?
アセンブリでは元の値を一時としてどこかに保存し、それをインクリメントしてから置き換えるので、コンテキストスイッチによって中断される可能性があるため、i ++はスレッドセーフなステートメントではないと聞きました。 しかし、++ iについて疑問に思っています。私の知る限り、これは 'add r1、r1、1'などの単一のアセンブリ命令に削減されます。これは1つの命令のみであるため、コンテキストスイッチによって中断されません。 誰かが明確にできますか?x86プラットフォームが使用されていると想定しています。
90 c++  c  multithreading 

9
std :: map insertまたはstd :: map find?
既存のエントリを保持したいマップを想定しています。20%の確率で、挿入するエントリは新しいデータです。返されたイテレータを使用してstd :: map :: findを実行してからstd :: map :: insertを実行する利点はありますか?または、挿入を試みてから、レコードが挿入されたか、挿入されなかったかをイテレータが示すかどうかに基づいて動作する方が速いですか?
90 c++  optimization  stl  stdmap 

3
<ランダム>はLinuxでは同じ数を生成しますが、Windowsでは生成しません
以下のコードは、間隔[1,100]の5つの疑似乱数のリストを生成することを目的としています。default_random_enginewith をシードしtime(0)ます。これは、システム時間をUNIX時間で返します。Microsoft Visual Studio 2013を使用してWindows 7でこのプログラムをコンパイルして実行すると、期待どおりに動作します(以下を参照)。しかし、g ++コンパイラーを備えたArch Linuxでそうすると、奇妙な動作をします。 Linuxでは、5つの数値が毎回生成されます。最後の4つの数値は実行ごとに異なります(よくあることです)、最初の数値は同じままです。 WindowsおよびLinuxでの5回の実行の出力例: | Windows: | Linux: --------------------------------------- Run 1 | 54,01,91,73,68 | 25,38,40,42,21 Run 2 | 46,24,16,93,82 | 25,78,66,80,81 Run 3 | 86,36,33,63,05 | 25,17,93,17,40 Run 4 | 75,79,66,23,84 | 25,70,95,01,54 Run 5 | 64,36,32,44,85 | 25,09,22,38,13 謎に加えて、その最初の数はLinuxでは定期的に1ずつ増加します。上記の出力を取得した後、約30分待って、最初の数値が変更され、常に26として生成されていることを再度確認しました。定期的に1ずつ増加し続け、現在は32になっています。の値が変化しますtime(0)。 最初の数値が実行間でめったに変化しないのはなぜですか?その後、変化すると、1ずつ増加しますか? コード。5つの数値とシステム時刻をきちんと出力します。 #include &lt;iostream&gt; …

6
エラー:free():次のサイズが無効です(高速):
この奇妙なエラーは何ですか?Ubuntu 10.10でg ++を使用してC ++をコンパイルしています。実行可能ファイルを実行すると、ランダムにポップアップ表示されます(多分8時間に2回、1時間に10回コンパイルされます)。ただし、クリーンにして再コンパイルすると、ほとんどの場合それはなくなります。 *** glibc detected *** ./emailQueue.app: free(): invalid next size (fast): 0x0000000001c40270 *** ======= Backtrace: ========= /lib/libc.so.6(+0x774b6)[0x7f490d95e4b6] /lib/libc.so.6(cfree+0x73)[0x7f490d964c83] ./emailQueue.app[0x401f47] /lib/libc.so.6(__libc_start_main+0xfe)[0x7f490d905d8e] ./emailQueue.app[0x401cc9] ======= Memory map: ======== 00400000-0040d000 r-xp 00000000 08:01 1311132 /home/server/Projects/email/emailQueue.app 0060d000-0060e000 r--p 0000d000 08:01 1311132 /home/server/Projects/email/emailQueue.app 0060e000-0060f000 rw-p 0000e000 08:01 1311132 /home/server/Projects/email/emailQueue.app 01c40000-01c82000 rw-p 00000000 00:00 …
90 c++  g++ 

4
cc1plus:エラー:g ++で認識されないコマンドラインオプション“ -std = c ++ 11”
私が使用してコンパイルしようとしているg++とのいずれか-std=c++11またはc++0xフラグ。 ただし、このエラーが発生します cc1plus: error: unrecognized command line option "-std=c++11" g ++ --version g++ (GCC) 4.1.2 20080704 (Red Hat 4.1.2-54) Copyright (C) 2006 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

2
非静的データメンバーとネストされたクラスコンストラクターのクラス内初期化を使用するときのエラー
次のコードは非常に些細なものであり、正常にコンパイルされるはずです。 struct A { struct B { int i = 0; }; B b; A(const B&amp; _b = B()) : b(_b) {} }; このコードをg ++バージョン4.7.2、4.8.1、clang ++ 3.2および3.3でテストしました。このコードでg ++ 4.7.2 segfaultが発生するという事実(http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57770)を除いて、テスト済みの他のコンパイラーは、あまり説明のないエラーメッセージを出力します。 g ++ 4.8.1: test.cpp: In constructor ‘constexpr A::B::B()’: test.cpp:3:12: error: constructor required before non-static data member for ‘A::B::i’ has been …

3
シグナル「SIGILL」の原因は何ですか?
NDKとGCCを使用して、いくつかのC ++コードをAndroidに移植しています。コードは基本的に実行されます。ある時点で、Eclipseでデバッグするとき、呼び出し Dabbler::Android::Factory* pFactory = new Dabbler::Android::Factory; このエラーの原因: Thread [1] (Suspended: Signal 'SIGILL' received. Description: Illegal instruction.) 1 &lt;symbol is not available&gt; 0x812feb44 どういう意味ですか?コンパイラは何らかの理由で不正なコードを生成しましたか?コンストラクターにブレークポイントがあり(何もしない)、ヒットしません。私はすでに完全な再構築を行っています。 この問題を引き起こすために私は何が間違っているのでしょうか?

29
ポインターの有効性のテスト(C / C ++)
与えられたポインタが「有効」かどうかを(プログラム的にはもちろん)判断する方法はありますか?NULLのチェックは簡単ですが、0x00001234のようなものはどうですか?この種類のポインタを逆参照しようとすると、例外/クラッシュが発生します。 クロスプラットフォームの方法が推奨されますが、プラットフォーム固有(WindowsおよびLinuxの場合)でも問題ありません。 明確化のための更新: 問題は、古くなった、解放された、初期化されていないポインターには関係ありません。代わりに、呼び出し元からポインターを取得するAPI(文字列へのポインター、ファイルハンドルなど)を実装しています。呼び出し元は、ポインタとして(意図的または誤って)無効な値を送信できます。クラッシュを防ぐにはどうすればよいですか?
90 c++  c  validation  pointers  null 

18
演算子[] []オーバーロード
オーバーロードすることは可能ですか []演算子を2回ですか?許可するには、次のようなものですfunction[3][3](2次元配列のように)。 可能であれば、いくつかのサンプルコードをご覧ください。

6
doxygenを使用してC ++ソースからUMLクラス図を作成する方法
doxygenを使用して簡単なクラス図を生成する方法を説明した資料を探していましたが、見つかりませんでした。誰か助けてもらえますか? C ++ファイルのセットから、以下に示すような図を作成する必要があります。 これを簡単に実現するためのより良いツールがある場合は、お知らせください。

2
この浮動小数点最適化は許可されていますか?
私は、float大きな整数を正確に表す能力を失う場所を調べてみました。だから私はこの小さなスニペットを書きました: int main() { for (int i=0; ; i++) { if ((float)i!=i) { return i; } } } このコードは、clangを除くすべてのコンパイラで機能するようです。Clangは単純な無限ループを生成します。ゴッドボルト。 これは許可されますか?はいの場合、QoIの問題ですか?

8
vector <bool>の代替
(うまくいけば)私たち全員が知っているように、vector&lt;bool&gt;完全に壊れており、C配列として扱うことはできません。この機能を取得する最良の方法は何ですか?これまでのところ、私が考えているアイデアは次のとおりです。 使用するvector&lt;char&gt;代わりに、または ラッパークラスを使用し、 vector&lt;bool_wrapper&gt; どうやってこの問題を処理しますか?c_array()機能が必要です。 余談ですが、このc_array()方法が必要ない場合、ランダムアクセスが必要な場合にこの問題に取り組む最善の方法は何ですか?両端キューなどを使用する必要がありますか? 編集: 動的なサイズ設定が必要です。 知らない人のvector&lt;bool&gt;ために、それぞれboolが1ビットを取るように専門化されています。したがって、それをCスタイルの配列に変換することはできません。 「ラッパー」はちょっと誤称だと思います。私はこのようなことを考えていました: もちろん、my_boolアライメントの問題が発生する可能性があるため、次に読む必要があります:( struct my_bool { bool the_bool; }; vector&lt;my_bool&gt; haha_i_tricked_you;
90 c++  stl  vector  boolean 

4
固定サイズの浮動小数点型
stdint.h(C99)、ブースト/ cstdint.hpp、及びcstdint(C ++ 0X)ヘッダタイプは、とりわけ、ありますint32_t。 同様の固定サイズの浮動小数点型はありますか?のようなものfloat32_t?
90 c++  c  boost  floating-point 


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