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

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

4
オンラインIDEで奇妙な動作をするプログラム
私は以下のC ++プログラム(ソース)に出くわしました: #include <iostream> int main() { for (int i = 0; i < 300; i++) std::cout << i << " " << i * 12345678 << std::endl; } それは単純なプログラムのように見え、私のローカルマシンで正しい出力を提供します。 0 0 1 12345678 2 24691356 ... 297 -628300930 298 -615955252 299 -603609574 ただし、codechefなどのオンラインIDEでは、次の出力が得られます。 0 0 1 12345678 2 24691356 …

6
継承:「A」は「B」のアクセスできないベースです
$ cat inheritance.cpp #include <iostream> using namespace std; class A { }; class B : private A { }; int main() { A* ab = new B; } $ $ g++ inheritance.cpp inheritance.cpp: In function 'int main()': inheritance.cpp:9: error: 'A' is an inaccessible base of 'B' $ 私はこのエラーを理解していません。 私が理解しているように、そしてこのチュートリアルが確認しているように、private継承はメンバーがclass B外の世界に見える方法を変えるだけです。 …
82 c++  inheritance 

11
C ++用のLINQライブラリはありますか?[閉まっている]
閉まっている。この質問は、StackOverflowのガイドラインを満たしていません。現在、回答を受け付けていません。 この質問を改善したいですか?質問を更新して、スタックオーバーフローのトピックになります。 4年前に閉鎖されました。 この質問を改善する 何らかの方法でLINQをC ++に移行させるための、プラットフォームに依存しない(CLIではない)動きはありますか? つまり、世界中のサーバーフレームワークの大部分がUNIXのフレーバーで実行されており、UNIX上のLINQ for C ++にアクセスできると、多くの人が喜ぶでしょう。
82 c++  linq  unix 

9
OpenCVのcvWaitKey()関数は何をしますか?
の実行中に何が起こりcvWaitKey()ますか?いくつかの典型的なユースケースは何ですか?私はOpenCVリファレンスでそれを見ましたが、ドキュメントはその正確な目的について明確ではありません。
82 c++  c  opencv 

7
クラス宣言中括弧の後のセミコロン
C ++クラスでは、なぜ閉じ中括弧の後にセミコロンがあるのですか?私は定期的にそれを忘れてコンパイラエラーが発生するため、時間が失われます。私にはやや不必要に思えますが、そうではない可能性があります。人々は本当に次のようなことをしますか? class MyClass { . . . } MyInstance; 構造体と列挙型のC互換性の観点から取得しますが、クラスはC言語の一部ではないため、主に類似の宣言構造体間の一貫性を維持していると思います。 私が探していたのは、何かを変更できるというよりも、設計の根拠に関連していましたが、優れたコード補完IDEは、コンパイル前にこれをトラップする可能性があります。
82 c++  class  oop  declaration 

4
式にはクラスタイプが必要です
私はしばらくの間C ++でコーディングしておらず、この単純なスニペットをコンパイルしようとすると行き詰まりました。 class A { public: void f() {} }; int main() { { A a; a.f(); // works fine } { A *a = new A(); a.f(); // this doesn't } }


6
C ++構造体を初期化する適切な方法
私たちのコードには、POD(Plain Old Datastructure)構造体が含まれています(これは、最初に初期化する必要がある他の構造体とPOD変数を含む基本的なc ++構造体です)。 私が読んだものに基づいて、それは次のようです: myStruct = (MyStruct*)calloc(1, sizeof(MyStruct)); 次のように、すべての値をゼロに初期化する必要があります。 myStruct = new MyStruct(); ただし、構造体が2番目の方法で初期化されると、Valgrindは後で、これらの変数が使用されたときに「条件付きジャンプまたは移動は初期化されていない値に依存する」と文句を言います。私の理解はここに欠陥がありますか、それともValgrindは誤検知を投げていますか?

30
組み込み開発にC ++の代わりにCを使用する理由はありますか?
質問 ハードウェアC ++とC89に2つのコンパイラがあります クラスでC ++を使用することを考えていますが、ポリモーフィズムはありません(vtableを回避するため)。C ++を使用したい主な理由は次のとおりです。 マクロ定義の代わりに「インライン」関数を使用することを好みます。 プレフィックスがコードを乱雑にするので、名前空間を使用したいと思います。 C ++は、主にテンプレートと冗長なキャストのために、少しタイプが安全だと思います。 私はオーバーロードされた関数とコンストラクター(自動キャストに使用される)が本当に好きです。 非常に限られたハードウェア(4kbのRAM)向けに開発する場合、C89を使い続ける理由はありますか? 結論 あなたの答えをありがとう、彼らは本当に役に立ちました! 私は主題を熟考しました、そして私は主に以下のためにCに固執します: Cで実際のコードを予測する方が簡単です。これは、RAMが4kbしかない場合に非常に重要です。 私のチームは主にC開発者で構成されているため、高度なC ++機能はあまり使用されません。 Cコンパイラ(C89)で関数をインライン化する方法を見つけました。 あなたがたくさんの良い答えを提供したので、1つの答えを受け入れるのは難しいです。残念ながら、ウィキを作成して受け入れることができないので、私が最も考えさせられた答えを1つ選びます。
82 c++  c  embedded  c89 

11
uint_fast32_tよりもuint32_tが優先されるのはなぜですか?
それuint32_tよりもはるかに普及しているようですuint_fast32_t(これは事例証拠であると私は理解しています)。しかし、それは私には直感に反しているようです。 ほとんどの場合、実装の使用を見ると、uint32_t本当に必要なのは、最大4,294,967,295(通常は65,535から4,294,967,295の間のはるかに低い境界)の値を保持できる整数です。 その後、使用する奇妙なようだuint32_tとして、「正確に32ビットの」保証が必要とされていない、と「最速の利用可能> = 32ビット」の保証はuint_fast32_t正確に正しい考えているようです。さらに、通常は実装されていますが、uint32_t実際に存在することが保証されているわけではありません。 では、なぜそれuint32_tが好まれるのでしょうか。それは単によく知られているのですか、それとも他のものよりも技術的な利点がありますか?
82 c++  c  int 

7
署名されたintではなくunsignedintを使用すると、バグが発生する可能性が高くなりますか?どうして?
ではGoogleのC ++スタイルガイド、「符号なし整数」のトピックに、それがあることが示唆されました 歴史的な事故のため、C ++標準では、コンテナのサイズを表すために符号なし整数も使用しています。標準化団体の多くのメンバーは、これは間違いだと信じていますが、現時点で修正することは事実上不可能です。符号なし演算は単純な整数の動作をモデル化せず、代わりにモジュラー演算(オーバーフロー/アンダーフローでラップアラウンド)をモデル化する標準によって定義されるという事実は、重要なクラスのバグをコンパイラーが診断できないことを意味します。 モジュラー演算の何が問題になっていますか?それはunsignedintの期待される振る舞いではありませんか? ガイドはどのようなバグ(重要なクラス)を参照していますか?バグがあふれていますか? 変数が負でないことを主張するためだけに符号なし型を使用しないでください。 unsignedintよりもsignedintを使用することを考えることができる理由の1つは、オーバーフローした場合(負の場合)、検出が容易になるためです。

6
CPUアーキテクチャのコンパイル時の検出
CまたはC ++コードをコンパイルするときにCPUアーキテクチャを見つけるための最も信頼できる方法は何ですか?私の知る限り、異なるコンパイラは、(非標準のプリプロセッサの定義の独自のセットを持っている_M_X86MSVSで、__i386__、__arm__GCCで、など)。 構築しているアーキテクチャを検出する標準的な方法はありますか?そうでない場合は、すべてのボイラープレートを含むヘッダーなど、さまざまなコンパイラーのそのような定義の包括的なリストのソースはあり#ifdefますか?

4
C ++ 11はvector <const T>を許可しますか?
コンテナの要件がC ++ 03からC ++ 11に変更されました。C ++ 03には包括的な要件(コピーの構成可能性やベクターの割り当て可能性など)がありましたが、C ++ 11では各コンテナー操作に関するきめ細かい要件が定義されています(セクション23.2)。 その結果、割り当てを必要としない特定の操作(構築およびpush_backそのような操作)のみを実行する限り、たとえば、コピー構築可能であるが割り当て不可能な型(constメンバーを持つ構造体など)をベクトルに格納できます。;でinsertはありません)。 私が疑問に思っているのは、これは標準が現在許可していることを意味するのvector&lt;const T&gt;でしょうか?const Tconstメンバーを持つ構造体のように、コピー構築可能であるが割り当て可能ではないタイプである必要がある理由はわかりませんが、何かを見逃している可能性があります。 (私が何かを見逃したかもしれないと思う理由の一部は、インスタンス化しようとするとgccトランクがクラッシュして燃えることですvector&lt;const T&gt;がvector&lt;T&gt;、Tにconstメンバーがある場合は問題ありません)。
82 c++  vector  c++11  constants 

12
C / C ++での署名付きオーバーフローの検出
一見すると、この質問は整数オーバーフローを検出する方法の複製のように見えるかもしれません。ただし、実際には大幅に異なります。 符号なし整数オーバーフローの検出は非常に簡単ですが、C / C ++での符号付きオーバーフローの検出は実際にはほとんどの人が考えるよりも難しいことがわかりました。 それを行う最も明白でありながら素朴な方法は、次のようになります。 int add(int lhs, int rhs) { int sum = lhs + rhs; if ((lhs &gt;= 0 &amp;&amp; sum &lt; rhs) || (lhs &lt; 0 &amp;&amp; sum &gt; rhs)) { /* an overflow has occurred */ abort(); } return sum; } これに伴う問題は、C標準によれば、符号付き整数オーバーフローは 未定義の動作であるということです。 言い換えると、標準によれば、符号付きオーバーフローが発生するとすぐに、プログラムはnullポインターを逆参照した場合と同じように無効になります。したがって、上記の事後条件チェックの例のように、未定義の動作を引き起こして、事後にオーバーフローを検出しようとすることはできません。 上記のチェックは多くのコンパイラで機能する可能性がありますが、信頼することはできません。実際、C標準では符号付き整数オーバーフローは未定義であるとされているため、一部のコンパイラ(GCCなど)は上記のチェックを最適化します。、最適化フラグが設定されると、符号付きオーバーフローは不可能であると想定するため、を最適化します。これにより、オーバーフローをチェックする試みが完全に中断されます。 …

6
符号なし変数に負の値を割り当てるとどうなりますか?
符号なし変数に負の値を割り当てるとどうなるか知りたいと思いました。 コードは次のようになります。 unsigned int nVal = 0; nVal = -5; コンパイラエラーは発生しませんでした。私がプログラムを実行したときnVal、奇妙な値が割り当てられました!2の補数の値が割り当てられる可能性がありnValますか?

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