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

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


9
マップに挿入する推奨/慣用の方法は何ですか?
に要素を挿入する4つの異なる方法を特定しましたstd::map。 std::map<int, int> function; function[0] = 42; function.insert(std::map<int, int>::value_type(0, 42)); function.insert(std::pair<int, int>(0, 42)); function.insert(std::make_pair(0, 42)); それらのうちどれが好ましい/慣用的な方法ですか?(そして私が考えていない別の方法がありますか?)
111 c++  stl  insert  stdmap  std-pair 


4
C ++モジュール-なぜC ++ 0xから削除されたのですか?彼らは後で戻ってきますか?
C ++ 0xのモジュールに関するこの古いC ++ 0xドラフトを発見しました。 アイデアは、コンパイル中にモジュールファイルを生成し、次に他の.cppファイルによって使用される.cppファイルのみを書き込むことにより、現在の.h / .cppシステムから抜け出すことでした。 これは本当に素晴らしい機能のようです。 しかし私の質問は、なぜC ++ 0xからそれを削除したのですか?技術的な問題が多すぎたためでしょうか。時間不足?そして、彼らはC ++の旧バージョンのためにそれに取り組むことを検討すると思いますか?

2
「……」トークンの意味は何ですか?つまり、パラメータパックの二重省略記号演算子
新しいC ++ 11ヘッダーのgccの現在の実装を閲覧しているときに、「......」トークンに遭遇しました。次のコードが[ideone.comを介して]正常にコンパイルされることを確認できます。 template <typename T> struct X { /* ... */ }; template <typename T, typename ... U> struct X<T(U......)> // this line is the important one { /* ... */ }; それで、このトークンの意味は何ですか? 編集:SOは質問タイトルの「......」を「...」にトリミングしたように見えますが、私は本当に「......」を意味していました。:)



11
用語の意味と概念を理解する-RAII(Resource Acquisition is Initialization)
C ++開発者に、RAIIとは何か、なぜそれが重要なのか、そして他の言語との関連性があるかどうかについての説明を教えていただけませんか? 私は少し知っています。「リソース獲得は初期化」の略だと思います。ただし、その名前は、RAIIが何であるか(おそらく正しくない)を理解しているとは言えません。RAIIはスタック上のオブジェクトを初期化する方法であり、これらの変数がスコープから外れると、デストラクターが自動的にリソースがクリーンアップされる原因となる。 それでは、なぜ「スタックを使用してクリーンアップをトリガーする」(UTSTTC :)と呼ばれないのですか?そこから「らい」までどうやって行くの? そして、スタック上に存在する何かのクリーンアップを引き起こすスタック上に何かをどのように作成できますか?また、RAIIが使えない場合はありますか?ガベージコレクションを希望していることはありますか?少なくとも、他のオブジェクトを管理しながら、いくつかのオブジェクトに使用できるガベージコレクターはありますか? ありがとう。

3
MFCとATLの基本的な違いは何ですか?
それらを「通常の」GUIプログラム(COMなし、ActiveXなし、派手なものなし)にのみ使用していると仮定すると、ATLとMFCの基本的な違いは何ですか? 私はウェブでいくつかの検索を行いましたが、結局のところ、どの回答も実際には私の質問に答えていません。 http://msdn.microsoft.com/en-us/library/bk8ytxz5(v=vs.80).aspx: 「ATLは、C ++でCOMコンポーネントを作成し、小さなフットプリントを維持するための高速で簡単な方法です。MFCが自動的に提供するすべての組み込み機能が必要ない場合は、ATLを使用してコントロールを作成します。」 次の理由により、私の質問には実際には回答しません。 COMを使用していません。 これはMFC が高速でないことを意味しますか?なぜ、どのように? 「MFCを使用すると、完全なアプリケーション、ActiveXコントロール、およびアクティブドキュメントを作成できます。既にMFCでコントロールを作成している場合は、MFCでの開発を継続することをお勧めします。新しいコントロールを作成するとき、必要がない場合はATLの使用を検討してくださいMFCのすべての組み込み機能。」 また、私の質問には答えません。 そもそも、ActiveX が何なのか、私にもよくわかりません。 マイクロソフトがMFCの使用を推奨していないように見えますが、理由がわかりません。 ATLが提供しないMFCの「組み込み機能」とは正確には何ですか? 一般的に、これは私の疑問に答えません。なぜなら、それは欠点とその背後にある理由を説明しないからです。 直接的または間接的に、すべてが前のページにリンクしているように見えるためです。 新しいC ++プロジェクトでATL、MFC、Win32、CLRのどちらを使用するかをどのように決定しますか? 「ATL&MFCは間を決めてややトリッキーです。 [[いいえ冗談です!]] 私はあなたを参照してくださいしたいMSDNのページそれらの間で決定するために選択するために。」 明らかに、これは私の質問に答えません。:) http://www.codeguru.com/forum/archive/index.php/t-64778.html 等 私が現在観察しているもの(過去2日間、両方を学習しようとしている間): ATLはテンプレート、またはコンパイル時のポリモーフィズムに基づいています。 ATLメソッドは非仮想である傾向があり、参照を返す傾向があります。 MFCは仮想メソッド、または実行時のポリモーフィズムに基づいています。 MFCメソッドは仮想である傾向があり、ポインターを返す傾向があります。 しかし、それらの間にアーキテクチャ上の違いはないようです: どちらもメッセージマップを使用します(BEGIN_MSG_MAP対BEGIN_MESSAGE_MAP...大したこと) どちらもWin32メソッドをクラスにラップします どちらも、同様のクラスの持っているように思わCWnd対をCWindow しかし、コンパイル時と実行時の側面以外に実際の違いがない場合、なぜ両方が存在するのでしょうか。それらの1つで十分ではありませんか? ここで何が欠けていますか?
110 c++  visual-c++  mfc  atl 

8
mallocとnew —異なるパディング
高性能コンピューティング(10 ^ 5-10 ^ 6コア)にMPIを使用するプロジェクトのために、他の誰かのC ++コードをレビューしています。コードは、異なるアーキテクチャ上の(潜在的に)異なるマシン間の通信を可能にすることを目的としています。彼は次のようにコメントを書いています。 通常はnewandを使用しますdeleteが、ここではmallocand を使用していfreeます。これが必要なのは、一部のコンパイラは、new使用時にデータに異なるパディングを行うため、異なるプラットフォーム間でのデータ転送でエラーが発生するためです。これはで発生しませんmalloc。 これは、私が標準new対malloc質問から知っている何にも適合しません。 new / deleteとmalloc / freeの違いは何ですか?コンパイラがオブジェクトのサイズを異なる方法で計算する可能性があるという考えをほのめかします(しかし、なぜそれが使用と異なるのsizeofですか?) mallocと配置new vs. newはかなり人気のある質問ですがnew、mallocそうでない場合のコンストラクタの使用についてのみ話しますが、これは関係ありません。 mallocはどのようにアラインメントを理解しますか?メモリはどちらかと適切に整列することが保証されているか、newまたはmalloc私が以前考えていたものであると述べています。 私の推測では、彼は過去に自分のバグを誤って診断し、それを推定しnewてmalloc、異なる量のパディングを提供していると思いますが、これはおそらく正しくないと思います。しかし、Googleや以前の質問で答えを見つけることができません。 StackOverflow、私を助けてください、あなたは私の唯一の希望です!

30
C / C ++でバイトのビットの順序を逆にする最も簡単な方法は何ですか?
バイトのビット順序を逆にする方法は複数ありますが、開発者が実装するのに「最も簡単」なものは何なのか、私は知りたいです。そして、逆に言うと、 1110 -> 0111 0010 -> 0100 これは、この PHPの質問と似ていますが、重複していません。 これは、この Cの質問と似ていますが、重複していません。この質問は、開発者が実装する最も簡単な方法を求めています。「最適なアルゴリズム」は、メモリとCPUのパフォーマンスに関係しています。
110 c++  c  bit-manipulation 

10
C / C ++行番号
デバッグのために、C / C ++コンパイラで行番号を取得できますか?(特定のコンパイラの標準的な方法または特定の方法) 例えば if(!Logical) printf("Not logical value at line number %d \n",LineNumber); // How to get LineNumber without writing it by my hand?(dynamic compilation)

5
「WinMain @ 16」への未定義の参照
を使用してプログラムをビルドしようとするとEclipse CDT、次のようになります。 /mingw/lib/libmingw32.a(main.o):main.c:(.text+0x106): `WinMain @ 16への未定義の参照 何故ですか?そして、どうすればこの問題を解決できますか?
110 c++  eclipse  eclipse-cdt 

11
GCCとldで未使用のC / C ++シンボルを削除する方法は?
実行可能ファイルのサイズを大幅に最適化する必要があります(ARM開発)と、現在のビルドスキーム(gcc+ ld)で未使用のシンボルが削除されないことに気付きました。 arm-strip --strip-unneeded結果の実行可能ファイル/ライブラリのの使用は、実行可能ファイルの出力サイズを変更しません(私には理由がわかりません、たぶんそれができないのかもしれません)。 使用されていないシンボルが結果のファイルから削除されるように、ビルドパイプラインを変更する方法(存在する場合)は何ですか? 私もこれについては考えていませんが、現在の組み込み環境は非常に「強力」ではなく500K、2M結果を保存しても、ロードパフォーマンスが非常に向上します。 更新: 残念ながら、gcc私が使用する現在のバージョンには-dead-stripオプションがなく、-ffunction-sections... + --gc-sectionsfor を使用してもld、結果の出力に大きな違いはありません。 gcc + ld未使用のシンボルを自動的に取り除く必要があると確信していたので、これが問題になることにもショックを受けました(なぜそれらを保持する必要があるのですか?)。
110 c++  c  gcc  ld  strip 

5
std :: next_permutation実装の説明
std:next_permutation実装方法に興味があったので、gnu libstdc++ 4.7バージョンを抽出し、識別子とフォーマットをサニタイズして、次のデモを作成しました... #include <vector> #include <iostream> #include <algorithm> using namespace std; template<typename It> bool next_permutation(It begin, It end) { if (begin == end) return false; It i = begin; ++i; if (i == end) return false; i = end; --i; while (true) { It j = i; --i; if …

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