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

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

13
std :: mapと同等のremove_if
特定の条件に基づいて、マップからさまざまな要素を削除しようとしました。STLアルゴリズムを使用してどうすればよいですか? 最初は使用を考えましたがremove_if、連想コンテナに対してremove_ifが機能しないため、それは不可能です。 マップで機能する「remove_if」と同等のアルゴリズムはありますか? 簡単なオプションとして、マップをループして消去することを考えました。しかし、マップをループして安全なオプションを消去していますか?(イテレータは消去後に無効になるため) 私は次の例を使用しました: bool predicate(const std::pair<int,std::string>& x) { return x.first > 2; } int main(void) { std::map<int, std::string> aMap; aMap[2] = "two"; aMap[3] = "three"; aMap[4] = "four"; aMap[5] = "five"; aMap[6] = "six"; // does not work, an error // std::remove_if(aMap.begin(), aMap.end(), predicate); std::map<int, std::string>::iterator iter = …
118 c++  stl  map 

10
PimplイディオムとPure仮想クラスインターフェイス
プログラマーがPimplイディオムまたは純粋な仮想クラスと継承のどちらを選択するのかを考えていました。 Pimplイディオムには、各パブリックメソッドとオブジェクト作成のオーバーヘッドごとに1つの明示的な間接指定が付属していることを理解しています。 一方、純粋仮想クラスには、継承する実装のための暗黙の間接指定(vtable)が付属しており、オブジェクト作成のオーバーヘッドがないことを理解しています。 編集:しかし、外部からオブジェクトを作成する場合は、ファクトリが必要です 純粋な仮想クラスがpimplイディオムより望ましくない理由は何ですか?

27
CMakeがVisual C ++コンパイラを見つけられない
Visual Studio 2015をインストールし、以前のプロジェクトでCMakeを実行した後、Cコンパイラが見つからなかったことを示すCMakeエラー。 The C compiler identification is unknown The CXX compiler identification is unknown CMake Error at CMakeLists.txt:4 (PROJECT): No CMAKE_C_COMPILER could be found. CMake Error at CMakeLists.txt:4 (PROJECT): No CMAKE_CXX_COMPILER could be found. cl.exeVisual Studioフォルダーで検索しましたC:\Program Files\Microsoft Visual Studio 14.0が、見つかりませんでした。 Visual Studio 2015のWindowsで動作するようにCMakeを設定するにはどうすればよいですか?


3
C ++用のVimの構成
vimをC ++エディターにしたいと思います。私はそれを使用した経験がほとんどなく、C ++で動作するようにvimを構成するのに助けが必要です。次のような機能が必要です コード補完(stlと私のクラス) .ccファイルと.hファイルの切り替え C ++とvimの教祖であるあなたが持っているいくつかのトリックかもしれません。 いくつかの構成(説明付き)、またはチュートリアルへのリンク、私が利用できるプラグインを提供できますか?
118 c++  vim  configuration 

4
#.hまたは.c / .cppに含める?
CまたはC ++のいずれかでコーディングする場合、どこに#include? callback.h: #ifndef _CALLBACK_H_ #define _CALLBACK_H_ #include <sndfile.h> #include "main.h" void on_button_apply_clicked(GtkButton* button, struct user_data_s* data); void on_button_cancel_clicked(GtkButton* button, struct user_data_s* data); #endif callback.c: #include <stdlib.h> #include <math.h> #include "config.h" #include "callback.h" #include "play.h" void on_button_apply_clicked(GtkButton* button, struct user_data_s* data) { gint page; page = gtk_notebook_get_current_page(GTK_NOTEBOOK(data->notebook)); ... すべてのインクルードは.hまたは.c / …
118 c++  c 

10
C ++デストラクタはいつ呼び出されますか?
基本的な質問:プログラムはいつC ++でクラスのデストラクタメソッドを呼び出しますか?オブジェクトがスコープから外れたり、オブジェクトがdelete より具体的な質問: 1)オブジェクトがポインターを介して作成され、そのポインターが後で削除されるか、または指す新しいアドレスが与えられた場合、それが指し示していたオブジェクトはそのデストラクタを呼び出しますか(他に何も指していないと想定)? 2)質問1のフォローアップは、オブジェクトがスコープ外になるときを定義するものです(オブジェクトが特定の{block}をいつ出るかは関係ありません)。つまり、リンクされたリスト内のオブジェクトに対していつデストラクタが呼び出されるのでしょうか。 3)デストラクタを手動で呼び出しますか?
118 c++  destructor 

7
Visual Studio C ++ 2010でPDBファイルが見つからない、または開けない
Visual Studio 2010 C ++を使用していますが、プロジェクトはエラーなしでビルドされますが、実行するとこれが表示されます。私はWindows XPを使用しています。 'Shaders.exe': Loaded 'C:\Documents and Settings\User\My Documents\Visual Studio 2010\Projects\Shaders\Win32\Debug\Shaders.exe', Symbols loaded. 'Shaders.exe': Loaded 'C:\WINDOWS\system32\ntdll.dll', Cannot find or open the PDB file 'Shaders.exe': Loaded 'C:\WINDOWS\system32\kernel32.dll', Cannot find or open the PDB file 'Shaders.exe': Loaded 'C:\qt-everywhere-opensource-src-4.8.3\bin\QtCored4.dll', Symbols loaded. 'Shaders.exe': Loaded 'C:\WINDOWS\system32\user32.dll', Cannot find or open the PDB …

4
独自の中括弧内のforループ
私はこのforループのレイアウトに遭遇しました: #include <iostream> int main() { { for (int i = 0; i != 10; ++i) { std::cout << "delete i->second;" << std::endl; } } { for (size_t i = 0; i < 20; ++i) { std::cout << "delete m_indices[i];" << std::endl; } } return 0; } この余分なブレースの層が何のためにあるのかと思っていましたか?これは、コードベースで数回表示されます。
117 c++  for-loop  scope 

7
C ++ 11でのCOW std :: string実装の合法性
コピーオンライトはstd::stringC ++ 11での適合を実装するための実行可能な方法ではないというのが私の理解でしたが、最近議論されたとき、私は自分がそのステートメントを直接サポートできないことに気付きました。 C ++ 11がCOWベースの実装を許可しないことは正しいstd::stringですか? もしそうなら、この制限は新しい標準のどこかに(どこで)明示的に述べられていますか? または、この制限は、std::stringCOWベースのの実装を妨げる新しい要件の複合効果であるという意味で、暗黙のうちに含まれていstd::stringますか。この場合、「C ++ 11はCOWベースのstd::string実装を効果的に禁止する」という章と詩のスタイルの派生に興味があります。

6
C ++でのmapとhash_mapの比較
C ++ について質問がhash_mapありmapます。それmapはSTLにあることを理解していますhash_mapが、標準ではありません。2つの違いは何ですか?
117 c++  map  hashmap 

3
C ++コンパイラがこの条件付きブール割り当てを無条件割り当てとして最適化しないのはなぜですか?
次の関数について考えてみましょう。 void func(bool& flag) { if(!flag) flag=true; } flagに有効なブール値がある場合、これは次のように無条件にを設定することtrueと同じであるように思えます。 void func(bool& flag) { flag=true; } しかし、gccもclangもこのように最適化していません—どちらも-O3最適化レベルで次のものを生成します。 _Z4funcRb: .LFB0: .cfi_startproc cmp BYTE PTR [rdi], 0 jne .L1 mov BYTE PTR [rdi], 1 .L1: rep ret 私の質問は、コードが特別な場合に最適化することflagができないということvolatileですか、それとも参照が参照されていないので、そのような最適化が望ましくない理由があるのですか?それを読んだ時点で未定義の動作なしにflag何らかの方法で非true-または- false値が存在する可能性があることが唯一の理由のようですが、これが可能かどうかはわかりません。
117 c++  optimization 

1
C ++ 11のasync(launch :: async)は、高価なスレッドの作成を回避するためにスレッドプールを廃止しますか?
それはこの質問に緩く関連しています:std :: threadはC ++ 11にプールされていますか?。質問は異なりますが、意図は同じです。 質問1:高価なスレッドの作成を回避するために、独自の(またはサードパーティのライブラリ)スレッドプールを使用することはまだ意味がありますか? 他の質問の結論は、std::threadプールに依存することはできないということでした(そうでない場合もあります)。ただし、std::async(launch::async)プールされる可能性ははるかに高いようです。 それは標準によって強制されているとは思わないが、私見では、スレッドの作成が遅い場合は、すべての優れたC ++ 11実装がスレッドプーリングを使用すると予想します。新しいスレッドを作成するのが安価なプラットフォームでのみ、私は彼らが常に新しいスレッドを生成することを期待します。 質問2:これは私が考えていることですが、それを証明する事実はありません。私はよく間違えられるかもしれません。それは教育を受けた推測ですか? 最後に、ここでは、スレッドの作成が次のように表現できると私が考える方法を最初に示すサンプルコードをいくつか提供しましたasync(launch::async)。 例1: thread t([]{ f(); }); // ... t.join(); なる auto future = async(launch::async, []{ f(); }); // ... future.wait(); 例2:スレッドを起動して忘れる thread([]{ f(); }).detach(); なる // a bit clumsy... auto dummy = async(launch::async, []{ f(); }); // ... but …

14
C ++を学ぶ前にCを学ぶべきですか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。事実、参考文献、専門知識によって回答が裏付けられることを期待していますが、この質問は、討論、議論、投票、または拡張ディスカッションを求める可能性があります。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 7年前休業。 今日は大学のCS学部の開校日を訪れました。ラボのツアーでは、学部生からの最終年度プロジェクトのいくつかを試してみました。1つは特に良かった-一種のFPS小惑星ゲーム。私はsrcそれがC ++(他のプロジェクトのほとんどがJava 3Dアプリであった)で行われたことを見つけるためにディレクトリをのぞくと決めました。 私は以前にCをやったことがありませんが、以前にCコードを調べました。このゲームの.cppコードで見たものとは、それほど違って見えませんでした。 私はCまたはC ++のどちらかを学ぶことに興味がありますが、おそらくもう一方については後で学ぶことになります。私は他の前に1学習への効果があるとそうならば、人は?
117 c++  c 

11
非constメソッドがプライベートのときにpublic constメソッドが呼び出されないのはなぜですか?
このコードを考えてみましょう: struct A { void foo() const { std::cout << "const" << std::endl; } private: void foo() { std::cout << "non - const" << std::endl; } }; int main() { A a; a.foo(); } コンパイラエラーは次のとおりです。 エラー: 'void A :: foo()' is private`。 しかし、私がプライベートのものを削除すると、それはうまくいきます。非constメソッドがプライベートのときにpublic constメソッドが呼び出されないのはなぜですか? 言い換えると、なぜ過負荷解決がアクセス制御の前に来るのですか?これは奇妙です。一貫していると思いますか?コードが機能してからメソッドを追加しましたが、機能しているコードがまったくコンパイルされません。

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