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

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

7
std :: string :: c_str()ライフタイムとは何ですか?
私のプログラムの1つでは、で動作するいくつかのレガシーコードとやり取りする必要がありconst char*ます。 私が次のような構造を持っているとしましょう: struct Foo { const char* server; const char* name; }; 私の上位レベルのアプリケーションはのみを扱うstd::stringため、ポインターstd::string::c_str()を取得するためにを使用することを考えましたconst char*。 しかし、寿命はどのくらいですc_str()か? 未定義の動作に直面することなく、このようなことを行うことはできますか? { std::string server = "my_server"; std::string name = "my_name"; Foo foo; foo.server = server.c_str(); foo.name = name.c_str(); // We use foo use_foo(foo); // Foo is about to be destroyed, before name and server …
100 c++  string  cstring 

3
gcc std :: unordered_mapの実装は遅いですか?もしそうなら-なぜですか?
私たちは、C ++で高性能の重要なソフトウェアを開発しています。そこで、並行ハッシュマップが必要で、それを実装しました。そこで、並行ハッシュマップがと比較してどれほど遅いかを把握するためのベンチマークを作成しましたstd::unordered_map。 しかし、std::unordered_map信じられないほど遅いようです...だから、これは私たちのマイクロベンチマークです(並行マップでは、ロックが最適化されないことを確認するために新しいスレッドを生成し、私も0を挿入しないことに注意してくださいgoogle::dense_hash_map。 null値が必要です): boost::random::mt19937 rng; boost::random::uniform_int_distribution<> dist(std::numeric_limits<uint64_t>::min(), std::numeric_limits<uint64_t>::max()); std::vector<uint64_t> vec(SIZE); for (int i = 0; i < SIZE; ++i) { uint64_t val = 0; while (val == 0) { val = dist(rng); } vec[i] = val; } std::unordered_map<int, long double> map; auto begin = std::chrono::high_resolution_clock::now(); for (int i = …

2
std :: result_ofとdecltypeの違い
std::result_ofC ++ 0xでの必要性を理解するのに問題があります。私が正しく理解した場合result_ofは、特定のタイプのパラメーターを持つ関数オブジェクトを呼び出す結果のタイプを取得するために使用されます。例えば: template <typename F, typename Arg> typename std::result_of<F(Arg)>::type invoke(F f, Arg a) { return f(a); } 次のコードとの違いは本当にわかりません。 template <typename F, typename Arg> auto invoke(F f, Arg a) -> decltype(f(a)) //uses the f parameter { return f(a); } または template <typename F, typename Arg> auto invoke(F f, Arg a) …
100 c++  c++11  decltype  result-of 

8
C ++で2つの文字列を連結する方法は?
プライベートクラス変数があります char name[10].txtディレクトリに存在するファイルを開くことができるように、拡張子を追加があります。 これについてどうすればいいですか? 連結された文字列を保持する新しい文字列変数を作成することをお勧めします。
100 c++ 

11
コンパイル時の文字列ハッシュ
C ++ 11の新しい文字列リテラルを使用すると、コンパイル時に文字列のハッシュを計算できる可能性があることをいくつかの場所で読んだことがあります。しかし、誰も出てきて、それが可能であるか、どのように行われるかを言う準備ができていないようです。 これは可能ですか? オペレーターはどのように見えますか? このようなユースケースに特に興味があります。 void foo( const std::string& value ) { switch( std::hash(value) ) { case "one"_hash: one(); break; case "two"_hash: two(); break; /*many more cases*/ default: other(); break; } } 注:コンパイル時のハッシュ関数は、私が書いたとおりに見える必要はありません。最終的なソリューションがどのようになるかを推測するために最善を尽くしましたmeta_hash<"string"_meta>::valueが、実行可能なソリューションになる可能性もあります。


10
JavaとC / C ++間のプロセス間通信のための最速(低レイテンシ)な方法
TCPソケットを介してC / C ++で開発された「サーバー」に接続するJavaアプリがあります。 アプリとサーバーの両方が同じマシン、Solarisボックスで実行されています(ただし、最終的にはLinuxへの移行を検討しています)。交換されるデータの種類は単純なメッセージです(ログイン、ログインACK、クライアントは何かを要求し、サーバーは応答します)。各メッセージの長さは約300バイトです。 現在はソケットを使用しており、すべて問題ありませんが、IPCメソッドを使用してデータを交換する(レイテンシを短縮する)より高速な方法を探しています。 私はネットを調査していて、次のテクノロジーへの参照を思いつきました: 共有メモリ パイプ キュー DMA(Direct Memory Access)と呼ばれるもの しかし、私はそれぞれのパフォーマンスの適切な分析を見つけることができませんでした。JAVAとC / C ++の両方でそれらを実装する方法も(彼らが互いに通信できるように)できませんでした。 このコンテキストでの各メソッドのパフォーマンスと実現可能性について誰かがコメントできますか?有用な実装情報へのポインタ/リンクはありますか? 編集/更新 ここで得たコメントと回答に続いて、パイプのすぐ上に構築されているように見えるUnixドメインソケットに関する情報を見つけ、TCPスタック全体を節約しました。これはプラットフォーム固有なので、JNIまたはjudsかjunixsocketのいずれかでテストする予定です。 次に考えられる手順は、パイプの直接実装、次に共有メモリですが、複雑さのレベルがさらに高いという警告を受けています... ご協力いただきありがとうございます
100 java  c++  performance  ipc  latency 

4
記憶に関してアリーナという用語の意味は何ですか?
私はプログラミングの概念としてメモリに関する本を読んでいます。後の章の1つでは、作者は「アリーナ」という単語を多用していますが、決して定義していません。私は単語の意味とそれが記憶にどのように関連するかを検索しましたが、何も見つかりませんでした。以下は、著者が用語を使用するいくつかのコンテキストです。 「シリアライゼーションの次の例には、特定の分野からのメモリ割り当てと呼ばれる戦略が組み込まれています。」 「...これは、メモリリークを処理するとき、または特定の領域から割り当てるときに役立ちます。」 「...メモリの割り当てを解除する場合は、アリーナ全体の割り当てを解除します。」 著者は、1つの章で100回を超える用語を使用しています。用語集での唯一の定義は次のとおりです。 アリーナからの割り当て-最初にアリーナを割り当て、次にプログラム自体(プロセスメモリマネージャーではなく)によってアリーナ内の割り当て/割り当て解除を管理する手法。複雑なデータ構造とオブジェクトの圧縮とシリアル化、または安全が重要なシステムやフォールトトレラントシステムのメモリ管理に使用されます。 これらのコンテキストを与えられた誰かが私のためにアリーナを定義できますか?

7
C ++の「using」宣言のスコープは何ですか?
C ++で「using」宣言を使用して、std :: stringとstd :: vectorをローカル名前空間に追加しています(不要な「std ::」の入力を節約するため)。 using std::string; using std::vector; class Foo { /*...*/ }; この宣言の範囲は何ですか?ヘッダーでこれを行うと、ヘッダーを含むすべてのcppファイルにこれらの「using」宣言が挿入されますか?
100 c++ 

5
フロートをその最大/最小値に初期化するにはどうすればよいですか?
フロートまたはダブルの絶対最大値または最小値をハードコードするにはどうすればよいですか?単純に反復して最大のものをキャッチすることで、配列の最大/最小を検索したいと思います。 フロートには正と負の無限大もありますが、代わりにそれらを使用する必要がありますか?もしそうなら、コードでそれをどのように表すのですか?

8
C ++で関数名にエイリアスを割り当てるにはどうすればよいですか?
型、変数、名前空間の新しい名前を作成するのは簡単です。しかし、関数に新しい名前を割り当てるにはどうすればよいですか?例えば、私は名前を使用したいhollerためprintf。#defineは明白です...他の方法? ソリューション: #define holler printf void (*p)() = fn; //function pointer void (&r)() = fn; //function reference inline void g(){ f(); }
100 c++  alias 

4
C ++ constマップ要素へのアクセス
operator []を使用してconst C ++マップの要素にアクセスしようとしましたが、このメソッドは失敗しました。また、 "at()"を使用して同じことを試みました。今回はうまくいきました。ただし、 "at()"を使用してconst C ++マップの要素にアクセスする方法についての参照は見つかりませんでした。「at()」はC ++マップに新しく追加された関数ですか?これに関する詳細情報はどこにありますか?どうもありがとうございました! 例は次のとおりです。 #include <iostream> #include <map> using namespace std; int main() { map<int, char> A; A[1] = 'b'; A[3] = 'c'; const map<int, char> B = A; cout << B.at(3) << endl; // it works cout << B[3] << endl; // it …
100 c++  stl  map  const 

5
C ++の通常のポインターと比較して、スマートポインターのオーバーヘッドはどのくらいですか?
C ++ 11の通常のポインターと比較して、スマートポインターのオーバーヘッドはどのくらいですか?言い換えると、スマートポインターを使用するとコードが遅くなりますか? 具体的には、C ++ 11 std::shared_ptrとについて質問していstd::unique_ptrます。 明らかに、スタックを押し下げたものは大きくなります(少なくとも私はそう思います)。スマートポインターもその内部状態(参照カウントなど)を格納する必要があるため、問題は、実際にはどのくらいになるかです。パフォーマンスに影響がある場合はどうなりますか? たとえば、通常のポインタではなく、関数からスマートポインタを返します。 std::shared_ptr<const Value> getValue(); // versus const Value *getValue(); または、たとえば、関数の1つが通常のポインターの代わりにパラメーターとしてスマートポインターを受け入れる場合: void setValue(std::shared_ptr<const Value> val); // versus void setValue(const Value *val);



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