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

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

8
FIFOにはどのSTLコンテナを使用すればよいですか?
どのSTLコンテナが私のニーズに最適ですか?私は基本的に10要素幅のコンテナーを使用しており、最も古い要素(約100万回)を継続しpush_backながら新しい要素を継続的に追加していますpop_front。 私は現在std::deque、タスクにa を使用していますが、std::listそれ自体を再割り当てする必要がないので(またはa std::dequeをaと間違えているので)、aの方が効率的かどうか疑問に思っていましたstd::vector。または、私のニーズにさらに効率的なコンテナはありますか? PSランダムアクセスは必要ありません
89 c++  stl  fifo 

12
C ++で文字列の配列を宣言する方法は?
私は可能な限り最良の方法で文字列の静的配列のすべての要素を反復処理しようとしています。それを1行で宣言し、番号を追跡しなくても簡単に要素を追加/削除できるようにしたいと考えています。とてもシンプルに聞こえますね。 考えられる非解決策: vector<string> v; v.push_back("abc"); b.push_back("xyz"); for(int i = 0; i < v.size(); i++) cout << v[i] << endl; 問題-文字列のリストで1行にベクトルを作成する方法がない 考えられる非解決策2: string list[] = {"abc", "xyz"}; 問題-(私が知っている)文字列の数を自動的に取得する方法はありません。 これを行う簡単な方法があるはずです。
89 c++  arrays 

7
別々の文字列から(安全に)フルパス文字列を作成する方法は?
C ++にはpythonの関数と同等のものはありos.path.joinますか?基本的に、ファイルパスの2つ(またはそれ以上)の部分を組み合わせて、2つの部分が完全に一致することを確認する必要がないようにするものを探しています。それがQtにあれば、それもクールです。 基本的に、コードのデバッグに1時間を費やしましたが、少なくともその一部はでroot + filenameなければならないためでしたroot/ + filename。将来はそれを回避したいと考えています。
89 c++  qt  filepath 

9
stdcallおよびcdecl
(とりわけ)2種類の呼び出し規約-stdcallとcdeclがあります。私はそれらについていくつか質問があります: cdecl関数が呼び出されると、呼び出し元はスタックを解放する必要があるかどうかをどのようにして知るのですか?呼び出し側では、呼び出し元は、呼び出されている関数がcdecl関数かstdcall関数かを知っていますか?それはどのように機能しますか?呼び出し元は、スタックを解放する必要があるかどうかをどのようにして知るのですか?それともリンカーの責任ですか? stdcallとして宣言された関数が関数(呼び出し規約がcdeclである)を呼び出す場合、またはその逆の場合、これは不適切でしょうか? 一般的に、どの呼び出しがより高速になると言えますか-cdeclまたはstdcall?
89 c++  stdcall  cdecl 

3
「as-if」ルールとは正確には何ですか?
タイトルの通り、 「as-if」ルールとは正確には何ですか? 典型的な答えは次のとおりです。 プログラムの監視可能な動作を変更しない、あらゆるコード変換を許可するルール 時々、このルールに起因する特定の実装から動作を取得し続けます。何度も間違って。だから、このルールは正確には何ですか。この規格では、この規則がセクションまたは段落として明確に言及されていないため、この規則の範囲に正確に該当するものは何ですか?私には、標準で詳細に定義されていない灰色の領域のように見えます。誰かが標準からの参照を引用して詳細を詳しく説明できますか? 注:これはCとC ++の両方としてタグ付けします。これは、両方の言語に関連するためです。
89 c++  c  optimization  c++-faq  as-if 



7
関数レベルの静的変数はいつ割り当て/初期化されますか?
グローバルに宣言された変数は、プログラムの開始時に割り当てられる(そして、該当する場合は初期化される)と確信しています。 int globalgarbage; unsigned int anumber = 42; しかし、関数内で定義された静的なものはどうですか? void doSomething() { static bool globalish = true; // ... } globalish割り当てられるスペースはいつですか?プログラムがいつ始まるか推測しています。しかし、それも初期化されますか?またはdoSomething()最初に呼び出されたときに初期化されますか?
89 c++  variables 



4
g ++を使用したマルチスレッドコードのコンパイル
私はこれまでで最も簡単なコードを持っています: #include <iostream> #include <thread> void worker() { std::cout << "another thread"; } int main() { std::thread t(worker); std::cout << "main thread" << std::endl; t.join(); return 0; } まだコンパイルしg++て実行することはできませんが。 詳細: $ g++ --version g++ (Ubuntu/Linaro 4.8.1-10ubuntu8) 4.8.1 Copyright (C) 2013 Free Software Foundation, Inc. This is free software; see the …
89 c++  linux  ubuntu  gcc  g++ 

3
staticキーワードの廃止…これ以上?
C ++ではstatic、変換ユニット内でキーワードを使用して、シンボル(変数または関数宣言)の可視性に影響を与えることができます。 n3092では、これは非推奨になりました。 付録D.2 [depr.static] 名前空間スコープでオブジェクトを宣言する場合、staticキーワードの使用は非推奨になりました(3.3.6を参照)。 n3225では、これは削除されました。 私は見つけることができる唯一の記事は、やや非公式です。 ただし、Cとの互換性(およびCプログラムをC ++としてコンパイルする機能)のために、非推奨は煩わしいことを強調しています。ただし、CプログラムをC ++として直接コンパイルすることは、すでに苛立たしい経験になる可能性があるため、検討する必要があるかどうかはわかりません。 なぜ変更されたのか誰か知っていますか?
89 c++  static  c++11  standards 

4
「揮発性」の定義はこの揮発性ですか、それともGCCにいくつかの標準的なコンプライアンスの問題がありますか?
(WinAPIのSecureZeroMemoryのように)常にメモリをゼロにし、その後メモリが二度とアクセスされないとコンパイラが考えたとしても、最適化されない関数が必要です。揮発性の完璧な候補のようです。しかし、実際にこれをGCCで動作させるのにいくつか問題があります。関数の例を次に示します。 void volatileZeroMemory(volatile void* ptr, unsigned long long size) { volatile unsigned char* bytePtr = (volatile unsigned char*)ptr; while (size--) { *bytePtr++ = 0; } } 十分に単純です。ただし、GCCを呼び出すと実際に生成されるコードは、コンパイラのバージョンと実際にゼロにしようとしているバイト数によって大きく異なります。https://godbolt.org/g/cMaQm2 GCC4.4.7および4.5.3は揮発性を決して無視しません。 GCC 4.6.4および4.7.3は、配列サイズ1、2、および4の揮発性を無視します。 GCC 4.8.1から4.9.2までは、配列サイズ1および2の揮発性を無視します。 GCC 5.1から5.3までは、配列サイズ1、2、4、8の揮発性を無視します。 GCC 6.1は、どの配列サイズでもそれを無視します(一貫性のためのボーナスポイント)。 私がテストした他のコンパイラー(clang、icc、vc)は、コンパイラーのバージョンと配列サイズを問わず、期待どおりのストアを生成します。したがって、この時点で、これは(かなり古くて深刻な?)GCCコンパイラのバグなのか、それともこれが実際に準拠した動作であると不正確になり、ポータブルを作成することが本質的に不可能になる、標準でのvolatileの定義なのか疑問に思います。 SecureZeroMemory」関数? 編集:いくつかの興味深い観察。 #include <cstddef> #include <cstdint> #include <cstring> #include <atomic> void callMeMaybe(char* buf); …
89 c++  c  gcc  standards 

6
クラスメンバーを使用したC ++コールバック
私はこれが何度も尋ねられたことを知っています、そしてそれのためにがらくたを掘り下げて何がうまくいくかの簡単な例を見つけるのは難しいです。 私はこれを持っています、それは簡単で、それはのために働きMyClassます... #include <iostream> using std::cout; using std::endl; class MyClass { public: MyClass(); static void Callback(MyClass* instance, int x); private: int private_x; }; class EventHandler { public: void addHandler(MyClass* owner) { cout << "Handler added..." << endl; //Let's pretend an event just occured owner->Callback(owner,1); } }; EventHandler* handler; MyClass::MyClass() { …

5
constへのポインターの削除(T const *)
constポインタに関する基本的な質問があります。constポインターを使用して非constメンバー関数を呼び出すことは許可されていません。ただし、constポインターでこれを行うことは許可されています。 delete p; これは、本質的に非const 'メソッド'であるクラスのデストラクタを呼び出します。なぜこれが許可されるのですか?これをサポートするだけですか? delete this; それとも他の理由がありますか?

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