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

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

5
クラスメンバーとしての参照メンバー変数
私の職場では、このスタイルが広く使用されているのがわかります。- #include <iostream> using namespace std; class A { public: A(int& thing) : m_thing(thing) {} void printit() { cout << m_thing << endl; } protected: const int& m_thing; //usually would be more complex object }; int main(int argc, char* argv[]) { int myint = 5; A myA(myint); myA.printit(); return 0; …
85 c++  reference 

11
x + =はx = x + aよりも速いですか?
私はStroustrupの「C ++プログラミング言語」を読んでいました。彼は、変数に何かを追加する2つの方法のうちの1つだと言っています。 x = x + a; そして x += a; 彼は+=それがよりよく実行される可能性が高いので好む。彼はそれもより速く動くことを意味すると思います。 しかし、それは本当にですか?コンパイラなどに依存する場合、どうすれば確認できますか?

4
文字列の連結が期待どおりに機能しない[クローズ]
ここで何が求められているのかを知るのは難しいです。この質問は、あいまい、あいまい、不完全、広すぎる、または修辞的であり、現在の形式では合理的に答えることができません。この質問を明確にして再開できるようにするためのヘルプについては、ヘルプセンターに アクセスしてください。 8年前に閉鎖されました。 これはよくある問題ですが、参考資料やその他の資料を探しても、この質問に対する明確な答えは見つかりません。 次のコードについて考えてみます。 #include <string> // ... // in a method std::string a = "Hello "; std::string b = "World"; std::string c = a + b; コンパイラは、オーバーロードされた演算子が見つからないと言っています char[dim]。 文字列に+演算子がないということですか? しかし、いくつかの例では、このような状況があります。これがより多くの文字列を連結する正しい方法ではない場合、最良の方法は何ですか?

4
C / C ++では長い長い
このコードをGNUのC ++コンパイラで試していますが、その動作を理解できません。 #include <stdio.h>; int main() { int num1 = 1000000000; long num2 = 1000000000; long long num3; //num3 = 100000000000; long long num4 = ~0; printf("%u %u %u", sizeof(num1), sizeof(num2), sizeof(num3)); printf("%d %ld %lld %llu", num1, num2, num3, num4); return 0; } コメント行のコメントを解除すると、コードがコンパイルされず、エラーが発生します。 エラー:整数定数が長い型には大きすぎます ただし、コードをそのままコンパイルして実行すると、10000000000よりはるかに大きい値が生成されます。 どうして?


9
Math.pow(0、0)=== 1なのはなぜですか?
私たちは皆、000が不定であるは。 しかし、javascriptは次のように述べています。 Math.pow(0, 0) === 1 // true およびC ++は同じことを言います: pow(0, 0) == 1 // true どうして? そんなこと知ってる: >Math.pow(0.001, 0.001) 0.9931160484209338 しかし、なぜMath.pow(0, 0)エラーをスローしないのですか?または多分NaNより良いでしょう1。

4
C ++で同じクラスに異なる型を定義する方法
同じ実装を共有しているが、C ++ではまだ異なるタイプのいくつかのタイプが欲しいのですが。 簡単な例で私の質問を説明するために、すべて同じ操作と同じ実装を持つApple、Oranges、およびBananasのクラスが必要です。型安全性のおかげでエラーを避けたいので、それらに異なる型を持たせたいです。 class Apple { int p; public: Apple (int p) : p(p) {} int price () const {return p;} } class Banana { int p; public: Banana (int p) : p(p) {} int price () const {return p;} } class Orange ... コードを複製しないために、基本クラスのFruitを使用して、そこから継承できるようです。 class Fruit { int p; …
84 c++  types 

5
列挙型と強く型付けされた列挙型
私はC ++プログラミングの初心者です。 今日、私は新しいトピックに出くわします:強くタイプされた enum。私はそれを少し研究しましたが、今まで私はこれが必要な理由と同じものの使用法を見つけることができません。 たとえば、次の場合です。 enum xyz{a, b, c}; /*a = 0, b = 1, c = 2, (Typical C format)*/ なぜ書く必要があるのですか: enum class xyz{a, b, c}; ここで何をしようとしていますか?私の最も重要な疑問は、それをどのように使用するかです。私に理解してもらうための小さな例を教えてください。
84 c++  c++11  enums 

1
指定されたテンプレートパラメータを持つC ++ 11make_pairはコンパイルされません
-std = c ++ 11を有効にしてg ++ 4.7(後のスナップショットの1つ)で遊んでいました。私は既存のコードベースのいくつかをコンパイルしようとしましたが、失敗した1つのケースはやや混乱します。 誰かが何が起こっているのか説明していただければ幸いです。 コードは次のとおりです。 #include <utility> #include <iostream> #include <vector> #include <string> int main ( ) { std::string s = "abc"; // 1 ok std::pair < std::string, int > a = std::make_pair ( s, 7 ); // 2 error on the next line std::pair < …

2
std :: dynarray vs std :: vector
C ++ 14プレゼントstd::dynarray: std :: dynarrayは、構築時に固定され、オブジェクトの存続期間を通じて変更されないサイズの配列をカプセル化するシーケンスコンテナです。 std::dynarrayと同じように実行時に割り当てる必要がありますstd::vector。 では、より動的な(そしてサイズ変更std::dynarray可能な)使用できる一方で、どのような利点と使用法がありstd::vectorますか?
84 c++  stdvector 

1
キャスト演算子を明示的にすることはできますか?
コンストラクターに関して言えば、キーワードexplicitを追加すると、プログラマーの最初の意図ではないときに熱心なコンパイラーがオブジェクトを作成するのを防ぐことができます。そのようなメカニズムは鋳造オペレーターにも利用できますか? struct Foo { operator std::string() const; }; ここでは、例えば、私はキャストできるようにしたいと思いFooの中にstd::string、私は、このようなキャストは暗黙のうちに起こることを望んでいません。

7
CからC ++関数を呼び出す方法は?
私はこれを知っている。 C ++からC関数を呼び出す: アプリケーションがC ++であり、Cで記述されたライブラリから関数を呼び出さなければならなかった場合、 //main.cpp extern "C" void C_library_function(int x, int y);//prototype C_library_function(2,4);// directly using it. これは名前C_library_functionを壊さず、リンカーは入力* .libファイルで同じ名前を見つけ、問題は解決されます。 CからC ++関数を呼び出す??? しかし、ここではCで書かれた大きなアプリケーションを拡張しているので、C ++で書かれたライブラリを使用する必要があります。ここでは、C ++の名前マングリングが問題を引き起こしています。リンカーは、未解決のシンボルについて不平を言っています。CプロジェクトでC ++コンパイラを使用することはできません。これは、他の多くのものを壊してしまうためです。抜け道は何ですか? ちなみに私はMSVCを使用しています
84 c++  c  visual-c++  extern-c 

4
クロスの初期化の兆候は何ですか?
次のコードについて考えてみます。 #include <iostream> using namespace std; int main() { int x, y, i; cin >> x >> y >> i; switch(i) { case 1: // int r = x + y; -- OK int r = 1; // Failed to Compile cout << r; break; case 2: r = x …

4
C ++例外処理ランタイムはどのように実装されていますか?
C ++の例外処理メカニズムがどのように機能するかに興味があります。具体的には、例外オブジェクトはどこに保存され、キャッチされるまで複数のスコープをどのように伝播しますか?グローバルエリアに保管されていますか? これはコンパイラ固有である可能性があるため、誰かがg ++コンパイラスイートのコンテキストでこれを説明できますか?

10
超高性能C / C ++ハッシュマップ(表、辞書)[クローズ]
閉まっている。この質問は、StackOverflowのガイドラインを満たしていません。現在、回答を受け付けていません。 この質問を改善したいですか?質問を更新して、StackOverflowのトピックになります。 5年前に閉鎖されました。 この質問を改善する 高性能ハッシュマップデータ構造で値を構造化するには、プリミティブキー(int、おそらくlong)をマップする必要があります。 私のプログラムにはこれらのマップが数百あり、各マップには通常最大で数千のエントリがあります。ただし、マップは常に「更新」または「チャーン」されます。何百万もの処理を想像addし、delete第二のメッセージ。 CまたはC ++のどのライブラリが、このユースケースに適合するデータ構造を持っていますか?または、独自に構築することをどのように推奨しますか?ありがとう!

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