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

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

10
C ++ 11のラムダで、値によるキャプチャにデフォルトで「可変」キーワードが必要なのはなぜですか?
短い例: #include <iostream> int main() { int n; [&](){n = 10;}(); // OK [=]() mutable {n = 20;}(); // OK // [=](){n = 10;}(); // Error: a by-value capture cannot be modified in a non-mutable lambda std::cout << n << "\n"; // "10" } 質問:なぜmutableキーワードが必要なのですか?名前付き関数に渡す従来のパラメーターとはかなり異なります。背後にある理論的根拠は何ですか? 値によるキャプチャの全体のポイントは、ユーザーが一時変数を変更できるようにすることだという印象を受けました。それ以外の場合は、ほとんどの場合、参照によるキャプチャを使用した方がよいのではないでしょうか。 悟りはありますか? (ちなみに私はMSVC2010を使用しています。これは標準のはずです)
256 c++  lambda  c++11 

10
マップにキーの値が含まれているかどうかを確認しますか?
STLマップに特定のキーの値が含まれているかどうかを判断する最良の方法は何ですか? #include <map> using namespace std; struct Bar { int i; }; int main() { map<int, Bar> m; Bar b = {0}; Bar b1 = {1}; m[0] = b; m[1] = b1; //Bar b2 = m[2]; map<int, Bar>::iterator iter = m.find(2); Bar b3 = iter->second; } デバッガでこれを調べると、iter単なるガベージデータのように見えます。 この行のコメントを外した場合: Bar b2 …
256 c++  stl  map 

15
CおよびC ++での共用体の目的
私は以前にユニオンを快適に使用しました。今日、私はこの投稿を読んで、このコードが union ARGB { uint32_t colour; struct componentsTag { uint8_t b; uint8_t g; uint8_t r; uint8_t a; } components; } pixel; pixel.colour = 0xff040201; // ARGB::colour is the active member from now on // somewhere down the line, without any edit to pixel if(pixel.components.a) // accessing the non-active member ARGB::components …
254 c++  c  unions  type-punning 

14
C ++のインライン関数の利点?
C ++でインライン関数を使用する利点と欠点は何ですか?コンパイラーが出力するコードのパフォーマンスを向上させるだけであることがわかりますが、今日の最適化されたコンパイラー、高速CPU、巨大なメモリーなど(メモリーが不足していて、すべてが100KBのメモリーに収まらなければならなかった1980年とは異なります)彼らが今日持っている利点は何ですか?

8
一致する関数ポインターを呼び出すためのタプルの「アンパック」
std::tupleさまざまな数の値を保存しようとしています。これらの値は、保存された型と一致する関数ポインターへの呼び出しの引数として後で使用されます。 私が解決するのに苦労している問題を示す簡単な例を作成しました: #include <iostream> #include <tuple> void f(int a, double b, void* c) { std::cout << a << ":" << b << ":" << c << std::endl; } template <typename ...Args> struct save_it_for_later { std::tuple<Args...> params; void (*func)(Args...); void delayed_dispatch() { // How can I "unpack" params to call func? …

4
char配列を文字列に変換する方法は?
C ++ stringをchar配列に変換するc_strことは、string の関数を使用して、それを実行するのと同じくらい簡単strcpyです。しかし、どのように反対をするのですか? :私のようなchar配列を持っているchar arr[ ] = "This is a test";に変換し、バックをします: string str = "This is a test。
254 c++  string  char  arrays 


3
コンストラクタの初期化リストの評価順序
いくつかの引数を取るコンストラクターがあります。リストされた順序で構築されていると想定していましたが、逆に構築されているために中止されたようです。引数を逆にすると、プログラムは異常終了しました。これは私が使用している構文の例です。この場合、a_はb_の前に初期化する必要があります。施工順序は保証できますか? 例えば class A { public: A(OtherClass o, string x, int y) : a_(o), b_(a_, x, y) { } OtherClass a_; AnotherClass b_; };
252 c++  gcc  c++-faq 

10
オブジェクトを初期化するときの{0}の意味は?
ときに{0}オブジェクトを初期化するために使用され、それが何を意味するのでしょうか?私は{0}どこへの参照も見つけることができません。中括弧があるため、Google検索は役に立ちません。 コード例: SHELLEXECUTEINFO sexi = {0}; // what does this do? sexi.cbSize = sizeof(SHELLEXECUTEINFO); sexi.hwnd = NULL; sexi.fMask = SEE_MASK_NOCLOSEPROCESS; sexi.lpFile = lpFile.c_str(); sexi.lpParameters = args; sexi.nShow = nShow; if(ShellExecuteEx(&sexi)) { DWORD wait = WaitForSingleObject(sexi.hProcess, INFINITE); if(wait == WAIT_OBJECT_0) GetExitCodeProcess(sexi.hProcess, &returnCode); } これがないと、上記のコードは実行時にクラッシュします。
252 c++  c 


8
カスタムタイプを「範囲ベースのforループ」で機能させるにはどうすればよいですか?
最近の多くの人のように、私はC ++ 11がもたらすさまざまな機能を試しています。私のお気に入りの1つは、「範囲ベースのforループ」です。 という事は承知しています: for(Type& v : a) { ... } 以下と同等です。 for(auto iv = begin(a); iv != end(a); ++iv) { Type& v = *iv; ... } そして、それはbegin()単にa.begin()標準的なコンテナに戻ります。 しかし、カスタムタイプを「範囲ベースのforループ」に対応させるにはどうすればよいでしょうか。 私はちょうど特化すべきであるbegin()とend()? カスタムタイプが名前空間xmlに属している場合、定義する必要がありますxml::begin()かstd::begin()? 要するに、それを行うためのガイドラインは何ですか?


26
C ++コンパイル時間を短縮するために使用できるテクニックは何ですか?
C ++コンパイル時間を短縮するために使用できるテクニックは何ですか? この質問は、Stack Overflowの質問C ++プログラミングスタイルへのコメントで出てきました。どんなアイデアがあるのか​​知りたいです。 私は関連する質問を見ました、なぜC ++コンパイルはそんなに時間がかかるのですか?、しかしそれは多くの解決策を提供しません。
249 c++ 

7
C ++でオブジェクトを関数に渡す方法は?
C ++プログラミングは初めてですが、Javaの経験があります。C ++で関数にオブジェクトを渡す方法に関するガイダンスが必要です。 ポインター、参照、または非ポインターと非参照の値を渡す必要がありますか?オブジェクトへの参照を保持する変数のみを渡すため、Javaではそのような問題はありません。 これらの各オプションをどこで使用するかについても説明していただければ幸いです。


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