-
main()はCおよびC ++で何を返す必要がありますか?
mainの戻り値は、プログラムがどのように終了したかを示すために使用されます。プログラムの実行が正常であった場合、0の戻り値が使用されます。異常終了(エラー、無効な入力、セグメンテーション違反など)は通常、ゼロ以外のリターンで終了します。ゼロ以外のコードの解釈方法に関する標準はありません。 ただし、独自のステータスコードを定義し、それらを使用してプログラムのさまざまなタイプの障害を表すことができます。 GCCは、終了信号の送信にstdlib.hで定義されているEXIT_SUCCESSまたはEXIT_FAILUREのいずれかを使用することをお勧めします。 C ++では、int main()は
-
CとC++での未定義、未指定、および実装定義の動作の違いは?
未定義の動作は、C++仕様で定義されていない動作です。たとえば、i ++ + ++ iのような式に複数の単項インクリメント/デクリメント演算がある場合、それらは定義されていない動作になります。これは、一部の言語構造が構文的に有効であるという事実によるものですが、コードの実行時の動作を予測することはできません。別の例は次の式です。u=(u ++); 実装定義の動作は、仕様で指定されていない動作であり、選択がどのように行われるかを実装者が決定して文書化するために残されます。この場合、行われた選択は保証されなければなりません。つまり、それだけが行われるべきです。 動作が指定されていない場合、C
-
C ++でソートされていない配列よりもソートされた配列を処理する方が速いのはなぜですか?
C ++では、分岐予測のため、ソートされていない配列よりもソートされた配列を処理する方が高速です。コンピュータアーキテクチャでは、分岐予測は、プログラムの命令フローで条件付き分岐(ジャンプ)が実行される可能性が高いかどうかを判断します。 例を見てみましょう- if(arr[i] > 50) { Do some operation B } else { Do some operation A } このコードを100個の要素に対してソートされていない順序とソートされた順序で実行すると、以下のことが起こります- ソートされた配列の場合- 1
-
C ++で配列を使用するにはどうすればよいですか?
配列は、連続したメモリ位置に配置された同じタイプの一連の要素であり、一意の識別子にインデックスを追加することで個別に参照できます。 C ++で配列を使用するには、最初に配列を宣言する必要があります。たとえば、 int arr[10]; これにより、サイズ10のint型の配列が宣言されます。これにより、10個の整数を連続したメモリに格納できます。その要素のいずれかを参照するには、配列アクセス演算子を使用して、アクセスする要素のインデックスを指定する必要があります。 C ++配列のインデックスは0から始まります。したがって、配列arrには、インデックス0、1、2、... 9の要素が10個あります
-
C ++のポインター変数と参照変数の違いは何ですか?
参照 変数が参照として宣言されると、それは既存の変数の代替名になります。 構文 Type &newname = existing name; 初期化 Type &pointer; pointer = variable name; ポインタ ポインタは、変数のアドレスを格納するために使用されます。 構文 Type *pointer;」と入力します 初期化 Type *pointer; pointer = variable name; 参照とポインタの主な違いは- 参照は別の名前の既存の変数を参照するために使用されますが、ポインターは変数のアドレスを格納するために使
-
コピーの省略と戻り値の最適化とは何ですか?
コピーの省略は、特定の状況で余分な(潜在的に高価な)コピーを防ぐために、ほとんどのコンパイラーによって実装される最適化です。したがって、使用されていないオブジェクトや副作用のないオブジェクトを作成しているコードがある場合は、 例 struct MyStruct { MyStruct() {} MyStruct(const MyStruct&) { std::cout << "Copied.\n"; } }; MyStruct f() {
-
構造体のsizeofが、C / C ++の各メンバーのsizeofの合計と等しくないのはなぜですか?
構造体のsizeofとその構造体の各メンバーのsizeofの合計の違いは、バイトのパディングと配置によるものです。 C / C ++のすべてのデータ型には、アライメント要件があります。プロセッサは、そのアーキテクチャの処理ワード長を持ちます。 32ビットマシンでは、処理ワードサイズは4バイトまたは32ビットになります。たとえば、構造体がある場合- 例 #include <iostream> using namespace std; struct X { char b[3]; int c; }; int main() {  
-
C / C ++でのアレイの減衰とは何ですか?
配列とポインタはC/C++でもまったく同じように機能します。しかし、いくつかの微妙な違いがあります。たとえば、sizeof演算子は2つでまったく異なる働きをします。ポインタ内の配列を変換する場合、 例 #include<iostream> int main() { const int a[] = { 2, 3, 5, 7, 11 }; const int* p = a; std::cout << ( sizeof(p) != sizeof(a) ); } 出力 これにより出力が得られます-
-
前方宣言C/C ++はいつ使用できますか?
前方宣言により、宣言に続くコードは、Personという名前のクラスがあることを認識できます。これは、これらの名前が使用されていることを確認すると、コンパイラーを満足させます。後でリンカはクラスの定義を見つけます。 例 Class Person; void myFunc(Person p1) { // ... } Class Person { // Class definition here }; したがって、この場合、コンパイラがmyFuncに遭遇すると、コードのどこかでこのクラスに遭遇することがわかります。これは、クラスを使用するコ
-
スマートポインタとは何ですか?C ++でいつ使用する必要がありますか?
スマートポインタは、「raw」(または「bare」)C++ポインタをラップするクラスです。ポインタが指すリソースを管理するために使用されます。たとえば、そのメモリ位置への参照が失われた場合。ガベージコレクターのように機能します。複数のスマートポインタタイプがあります。 ほとんどの場合、スマートポインタを使用する必要があります。これは、ポインタを使用する際の主な問題点が手動のメモリ管理とメモリリークであるためです。スマートポインタは、これらの両方を取り除こうとします。これらのいずれも実際には実行したくない場合は、スマートポインターを使用する必要があります。
-
現在のCまたはC++標準ドキュメントはどこにありますか?
現在のC標準ドキュメントはANSIWebストアで見つけることができます。 https://webstore.ansi.org/RecordDetail.aspx?sku=INCITS%2FISO%2FIEC+9899-2012 現在のC++標準ドキュメントは、ISO C ++Webサイトで購入できます-https://www.iso.org/standard/68564.html ISO C ++標準の作業ドラフトは、https://isocpp.org/std/the-standardでも入手できます。
-
static_cast、dynamic_cast、const_cast、およびreinterpret_castをC ++で使用する必要があるのはいつですか?
const_cast constを削除したり、変数に追加したりするために使用できます。これは、変数から定数を追加/削除する必要がある場合に役立ちます。 static_cast これは、通常/通常の型変換に使用されます。これは、暗黙の型強制の原因となるキャストでもあり、明示的に呼び出すこともできます。 floatをintに、charをintに変換する場合などに使用する必要があります。 dynamic_cast このキャストは、ポリモーフィズムを処理するために使用されます。派生クラスにキャストする場合にのみ使用する必要があります。これは、基本クラスから派生クラスにキャストするときに継承
-
C++シングルトンデザインパターンを説明します。
シングルトンデザインパターンは、クラスのインスタンス化を1つのオブジェクトに制限するために使用されるソフトウェアデザインの原則です。これは、システム全体でアクションを調整するために1つのオブジェクトが必要な場合に役立ちます。たとえば、ログをファイルに書き込むロガーを使用している場合は、シングルトンクラスを使用してそのようなロガーを作成できます。次のコードを使用してシングルトンクラスを作成できます- 例 #include <iostream> using namespace std; class Singleton { static Singleton
-
C ++ポインタを使用して別の関数からローカル変数にアクセスするにはどうすればよいですか?
スコープ外になると、ローカル変数にアクセスできなくなります。これがローカル変数であることの意味です。ただし、スコープ外のローカル変数のメモリにアクセスできる可能性がある例を見てみましょう。 例 #include<iostream> int* foo() { int x = 3; return &x; } int main() { int* address = foo(); cout << *address; *address = 12
-
C ++でfloatとdoubleを比較する方法は?
float変数とdouble変数の比較は、最終目標が何であるかによって異なります。詳細をあまり説明せずに実行可能な関数が必要で、一部の不正確な計算で問題が発生しない場合は、次の関数を使用できます- 例 #include<iostream> using namespace std; // Define the error that you can tolerate #define EPSILON 0.000001 bool areSame(double a, double b) { return fabs(a - b) < EPSILON; }
-
C / C ++でビットをどのように設定、クリア、および切り替えますか?
C、C ++、Python、およびこれらの操作をサポートする他のすべてのプログラミング言語でビット演算子を使用して、クリアビットとトグルビットを設定できます。また、ビットを適切な場所に配置するには、ビットシフト演算子を使用する必要があります。 少し設定する ビットを設定するには、ビットごとのOR演算子-を使用する必要があります。 例 #include n; i | =(1 <
-
C ++でCSVファイルを読み取って解析する方法は?
C ++でCSVファイルを解析するには、ライブラリを使用する必要があります。自分でファイルを読み取ると見逃す可能性がある場合が多いためです。 C ++用のBoostライブラリは、CSVファイルを読み取るための非常に優れたツールセットを提供します。たとえば、 例 #include<iostream> vector<string> parseCSVLine(string line){ using namespace boost; std::vector<std::string> vec; &n
-
C ++で文字列をトークン化しますか?
最初の方法は、文字列ストリームを使用して、スペースで区切られた単語を読み取ることです。これは少し制限されていますが、適切なチェックを提供すれば、タスクはかなりうまくいきます。 例 #include <vector> #include <string> #include <sstream> using namespace std; int main() { string str("Hello from the dark side"); string tmp; // A string
-
C /C++でのconstint*、const int * const、およびint const *の違いは?
上記の記号は、次のことを意味します- int* - Pointer to int. This one is pretty obvious. int const * - Pointer to const int. int * const - Const pointer to int int const * const - Const pointer to const int また、-にも注意してください const int * And int const * are the same. const int * const And int const * const are the same.
-
C ++で仮想デストラクタを使用するのはいつですか?
効果的なC++のScottMeyersによると- クラスに仮想関数がある場合は、仮想デストラクタが必要です。基本クラスとして設計されていないクラス、または多態的に使用されるように設計されていないクラスは、仮想デストラクタを宣言しないでください。 したがって、ポリモーフィック基本クラスで仮想デストラクタを宣言する必要があります。これは、派生コンストラクターを使用して基本クラスのオブジェクトを作成する場合- Base *b = new Derived(); // use b delete b; Baseのデストラクタが仮想でない場合、この場合、deletebの動作は未定義です。デストラクタへ