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

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

11
純粋な仮想関数が0で初期化されるのはなぜですか?
常に純粋仮想関数を次のように宣言します。 virtual void fun () = 0 ; つまり、常に0に割り当てられます。 私が理解しているのは、これがこの関数のvtableエントリをNULLに初期化することであり、ここに他の値があるとコンパイル時エラーが発生することです。この理解は正しいですか。

5
mainの適切な宣言は何ですか?
mainC ++ での関数の適切なシグネチャは何ですか?正しい戻り値の型とは何mainですか?から値を返すとはどういう意味ですか?許可されているパラメーターのタイプとは何ですか?それらの意味は何ですか? これはシステム固有ですか?それらのルールは時間とともに変化しましたか?違反した場合はどうなりますか?
147 c++  main  c++-faq 

1
注入されたクラス名があるのはなぜですか?
最近、奇妙なC ++機能、注入されたクラス名を見ました。 class X { }; X x1; class X::X x2; // class X::X is equal to X class X::X::X x3; // ...and so on... しかし、なぜこの機能が必要なのか理解できません。この機能を必要とするプラクティスはありますか? そして、この機能は古いC ++には存在しなかったと聞きました。では、いつ導入されたのですか?C ++ 03?C ++ 11?
147 c++ 

7
C ++は非推奨としてマーク
インターフェイスに、移植可能なC ++で非推奨にするメソッドがあります。私がこれについてグーグル検索したとき、私が得たすべてはマイクロソフト固有のソリューションでした。#pragma deprecatedおよび__declspec(deprecated)。 2番目の賞の解決策は、MSVCおよびGCCソリューションのifdefです。 ありがとう
147 c++ 

11
C ++でオブジェクトのタイプを見つける
クラスAとそれを継承する別のクラスBがあります。タイプAのオブジェクトをパラメーターとして受け入れる関数をオーバーライドしているので、Aを受け入れる必要があります。ただし、後でBのみが持つ関数を呼び出すと、したがって、渡されたオブジェクトがタイプBでない場合は、falseを返し、続行しないことを望みます。 私の関数に渡されたオブジェクトがどのタイプであるかを知る最良の方法は何ですか?
147 c++  types 

6
なぜstd :: move an std :: shared_ptrなのでしょうか?
私はClangソースコードを調べていましたが、次のスニペットを見つけました。 void CompilerInstance::setInvocation( std::shared_ptr<CompilerInvocation> Value) { Invocation = std::move(Value); } なぜ私がしたいでしょうか?std::movestd::shared_ptr 共有リソースの所有権を譲渡するポイントはありますか? なぜ私は代わりにこれをしないのですか? void CompilerInstance::setInvocation( std::shared_ptr<CompilerInvocation> Value) { Invocation = Value; }

6
C ++デリゲートとは何ですか?
C ++でのデリゲートの一般的な考え方は何ですか?それらは何ですか、どのように使用され、何に使用されますか? 最初に「ブラックボックス」の方法でそれらについて学びたいのですが、これらのことの根本についての少しの情報も素晴らしいでしょう。 これは最も純粋またはクリーンなC ++ではありませんが、私が作業しているコードベースには豊富に含まれています。それらを十分に理解したいと思っているので、それらを使用するだけで、ネストされた恐ろしいひどいテンプレートを掘り下げる必要はありません。 これらの2つのコードプロジェクトの記事は、私が何を意味するかを説明していますが、特に簡潔には説明していません。 メンバー関数ポインターと最速のC ++デリゲート 信じられないほど高速なC ++デリゲート

8
反復中のstd :: setからの要素の削除
セットを調べて、事前定義された基準を満たす要素を削除する必要があります。 これは私が書いたテストコードです: #include <set> #include <algorithm> void printElement(int value) { std::cout << value << " "; } int main() { int initNum[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; std::set<int> numbers(initNum, initNum + 10); // print '0 1 2 3 4 5 6 7 …

2
sjljとdwarfとsehの違いは何ですか?
プロジェクトのコンパイルに使用するコンパイラを決定するのに十分な情報が見つかりません。プロセスをシミュレートするさまざまなコンピューター上にいくつかのプログラムがあります。Linuxでは、GCCを使用しています。すべてが素晴らしいです。私はコードを最適化することができます、それは速くコンパイルし、それほど多くのメモリを使用しません。 私はMSVCおよびGCCコンパイラーで独自のベンチマークを行います。後で、(サブアーキテクチャごとに)わずかに高速なバイナリが生成されます。コンパイル時間はMSVCよりはるかに長いですが。 そこで、MinGWを使用することにしました。ただし、例外処理メソッドとそのMinGWでの実装に関する説明は見つかりません。異なるオペレーティングシステムとアーキテクチャに異なるディストリビューションを使用できます。 考慮事項: コンパイル時間とメモリは、私の使用にとって重要ではありません。重要なのはランタイムの最適化だけです。プログラムが十分に高速である必要があります。遅いコンパイラでも問題ありません。 OS:Microsoft Windows XP / 7/8 / Linux アーキテクチャ:Intel Core i7 / Core2 /およびXPを実行している非常に古いi686:P


10
Linux C ++エラー:「dlopen」への未定義の参照
LinuxでC ++(Eclipse)を使用していて、ライブラリを使用したいと思っています。Eclipseがエラーを表示します。 undefined reference to 'dlopen' あなたは解決策を知っていますか? これが私のコードです: #include <stdlib.h> #include <stdio.h> #include <dlfcn.h> int main(int argc, char **argv) { void *handle; double (*desk)(char*); char *error; handle = dlopen ("/lib/CEDD_LIB.so.6", RTLD_LAZY); if (!handle) { fputs (dlerror(), stderr); exit(1); } desk= dlsym(handle, "Apply"); if ((error = dlerror()) != NULL) { fputs(error, …
147 c++  linux  eclipse 

9
C ++ rand()が同じ桁の数値のみを生成するように見えるのはなぜですか?
C / C ++で書かれた小さなアプリケーションで、rand関数とおそらくシードの問題に直面しています: 次数が異なる、つまり対数の値が異なる(2を底とする)一連の乱数を生成したい。しかし、生成される数値はすべて同じ次数であり、2 ^ 25と2 ^ 30の間で変動しているようです。 rand()これは、現在比較的大きな数値であるUnix時間がシードされているためですか?何を忘れてるの?rand()の初めに1回だけ播種しmain()ます。
146 c++  c  math  random 

10
^ = 32の背後にあるアイデアは何ですか?小文字を大文字に、またはその逆に変換しますか?
コードフォースに関するいくつかの問題を解決していました。通常、私は最初に文字が大文字か小文字かをチェックし、次に減算または加算32して対応する文字に変換します。しかし、私は誰かが^= 32同じことをするためにやることを見つけました。ここにあります: char foo = 'a'; foo ^= 32; char bar = 'A'; bar ^= 32; cout << foo << ' ' << bar << '\n'; // foo is A, and bar is a これについての説明を探しましたが、わかりませんでした。なぜこれが機能するのですか?

19
スタックサンプリングを超えて:C ++プロファイラー
ハッカーの物語 日付は12/02/10です。クリスマスの前の日々がどんどんどろどろになっていて、私はWindowsプログラマーとして大部分の主要な障害にぶつかりました。私はAQTimeを使用しており、眠くて、光沢があり、非常に眠いので、VTuneをインストールしています。私はVS2008プロファイラーを使用しようとしましたが、積極的に罰せられているだけでなく、多くの場合無意味です。私はランダムな一時停止テクニックを使用しました。呼び出しツリーを調べました。関数のトレースを開始しました。しかし、悲しいことに、私が使用しているアプリは100万行を超えるコードであり、おそらく数百万行に相当するサードパーティのアプリが含まれています。 より良いツールが必要です。 私は他のトピックを読みました。 各トピックにリストされている各プロファイラーを試しました。単にこれらのジャンキーで高価なオプションよりも優れたもの、またはほとんど利益が得られない途方もない量の作業でなければなりません。問題をさらに複雑にするために、コードは大量にスレッド化され、いくつかのQtイベントループを実行します。それらのループの一部は非常に壊れやすく、タイミングの遅延が原因で重いインスツルメンテーションの下でクラッシュします。複数のイベントループを実行している理由を聞かないでください。誰にも言えません。 Windows環境でValgrindに沿ったオプションはありますか? 私がすでに試した長い壊れた道具よりも良いものはありますか? Qtと統合するために設計されたものはありますか、おそらくキュー内のイベントの便利な表示と一緒ですか? 私が試したツールの完全なリスト、およびイタリックで本当に役立つツール: AQTime:かなり良いです!深い再帰には問題がありますが、コールグラフはこれらの場合に正しく、混乱を解消するために使用できます。完璧なツールではありませんが、試してみる価値はあります。それはあなたのニーズに合うかもしれません、そしてそれは確かに私にとってほとんどの場合十分でした。 デバッグモードでのランダムな一時停止攻撃:十分な情報が不足しています。 優れたツールですが、完全なソリューションではありません。 Parallel Studios: 核となるオプション。目障りで、奇妙で、とてつもなく強力です。30日間の評価を上げて、適切かどうかを判断する必要があります。それもすごくかっこいいです。 AMD Codeanalyst: 素晴らしい、使いやすく、クラッシュしやすいですが、それは環境問題だと思います。無料なので試してみることをお勧めします。 ルーク・スタックウォーカー:小さなプロジェクトでうまく機能します。それを私たちのプロジェクトで機能させるのは少し困難です。しかし、いくつかの良い結果があり、それは間違いなく私の個人的な仕事のためのスリーピーを置き換えます。 PurifyPlus: Win-x64環境はサポートされません。最も目立つのはWindows 7です。それ以外は優れています。他の部門の多くの私の同僚はそれを誓います。 VS2008プロファイラー:関数トレースモードで必要な解像度で100ギグ以上の範囲の出力を生成します。プラス面では、確かな結果が得られます。 GProf:GCCが適度に効果的であることを要求します。 VTune:VTuneのW7は犯罪者の国境をサポートしています。そうでなければ優れている PIN:自分のツールを改造する必要があるので、これは最後の手段です。 Sleepy \ VerySleepy:小さいアプリに便利ですが、ここでは失敗します。 EasyProfiler:インストルメントする場所を示すために手動で挿入されたコードを少しでも気にしなければ問題ありません。 Valgrind:* nixのみですが、その環境では非常に優れています。 OProfile:Linuxのみ。 プロフィール:彼らは野生の馬を撃ちます。 私が試していない推奨ツール: XPerf: グローコード: Devpartner: 注: 現在のところIntel環境。VS2008、ブーストライブラリ。Qt 4+。そして、それらすべての惨めなhumdinger:trolltechによるQt / MFC統合。 現在:ほぼ2週間後、私の問題は解決したようです。リストにあるほぼすべてのものや、いくつかの個人的なトリックなど、さまざまなツールのおかげで、主要なボトルネックが見つかりました。ただし、新しいプロファイラと新しい技術のテスト、調査、試行を続けます。どうして?君たちが借りているからだ、君たちがロックしているから。タイムラインが少し遅くなりますが、私は新しいツールを試し続けることに非常に興奮しています。 概要 他の多くの問題の中で、最近、多くのコンポーネントが誤ったスレッドモデルに切り替わり、その下にあるコードが突然マルチスレッドでなくなったために深刻なハングアップが発生しました。私のNDAに違反しているのでこれ以上は言えませんが、これは何気ない検査や通常のコードレビューによってさえ発見されなかったと言えるでしょう。プロファイラー、コールグラフ、ランダムな一時停止を併用しなくても、美しい空の青い円弧に怒りを叫び続けます。ありがたいことに、私は今まで会ったことのない最高のハッカーと仕事をしており、素晴らしい「素晴らしいツールと素晴らしい人々でいっぱいの詩」にアクセスできます。 ジェントルフォーク、私はこれを非常に感謝しています。そして、私があなた一人一人に報奨金を報いるほどの担当者がいないことを後悔しているだけです。これは、SOでこれまでに得たものよりも良い答えを得るための重要な質問であるとまだ思います。 その結果、次の3週間は毎週、私ができる最大の報奨金を上げて、常識ではないと思う最高のツールを使って回答にそれを与えます。3週間後、私の罰を許していただければ、プロファイラーの明確なプロファイルが蓄積されていると思います。 テイクアウト プロファイラーを使用します。それらはリッチー、カーニハン、ベントレー、クヌースにとって十分なものです。私はあなたがあなたが誰だと思うかは気にしません。プロファイラーを使用します。あなたが持っているものが機能しない場合は、別のものを見つけてください。見つからない場合は、コーディングしてください。コードを作成できない場合や、ちょっとした電話が切れた場合、または行き詰まった場合は、ランダムな一時停止を使用してください。他のすべてが失敗した場合、プロファイラーを強打するためにいくつかの大学院生を雇います。 …

6
C ++、ベクターにコピーセット
にコピーstd::setする必要がありますstd::vector: std::set <double> input; input.insert(5); input.insert(6); std::vector <double> output; std::copy(input.begin(), input.end(), output.begin()); //Error: Vector iterator not dereferencable 問題はどこだ?
146 c++  copy  stdvector  stdset 

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