c++入門の基本概念

2405 ワード

    c++ c      ,                  ,    (c)                  , c++                      。
     1.   :                 ,c       32    ,  c++98      63    ,     c      ,       
     2.    

コンセプト:namespaceキーワードを使用して識別子の名前をローカライズし、名前の競合や名前の汚染を回避
命中空間の定義方法:namespace N 1、ネーミング空間はネスト可能で同じ名前のネーミング空間が現れ、コンパイラはコンパイル時にネーミング空間に結合し、ネーミング空間で定義された変数の役割ドメインはこのネーミング空間に限られる.
ネーミングスペースの3つの使用方法:N 1::a、using N 1::b、using namespace N 1;3.デフォルト・パラメータ:デフォルト・パラメータは、関数を定義または宣言するときに関数のパラメータにデフォルト値を指定し、実パラメータを渡さない場合はデフォルト値を使用します.分類:全デフォルトパラメータ(各パラメータにデフォルト値あり)、半デフォルトパラメータ
  • 注意:半デフォルトパラメータ定義時に右から左に値を割り当てる必要があります.この場合、渡される実パラメータは、一番左のデフォルトパラメータに優先的に一致します.
  • デフォルトパラメータは、関数定義と宣言で同時に定義できません.宣言することが望ましいです.4.リロード関数:同じ役割ドメインでいくつかの機能が似ている関数を定義し、そのパラメータのリスト(パラメータの個数、パラメータのタイプ、パラメータの順序)が異なる必要があります.ここでは、なぜc++で関数のリロードを構成できるのか、c言語ではだめなのか、cではコンパイラによる関数のネーミングは関数名に加えられ、c++はコンパイラによって異なるネーミングルールがあるが、同じ点では関数のパラメータリストはネーミング時に修飾されている.もちろん、c++エンジニアリングでは、自分のニーズに合わせて「extern」キーワードを追加してコンパイラをcスタイルとしてコンパイルすることもできます.例えば、#### extern "C" int Add(int x,int y);ここでコンパイラはCスタイルでコンパイルされます.5.参照(&):参照は、新しく定義された変数ではなく、参照された変数と共通のメモリ領域を持つ変数に別名を付けます.関数パラメータおよび関数としての戻り値
  • を参照
  • が関数として値を返す場合、関数の役割ドメインを離れた後、そのスタック上の空間はすでにシステムに返されているので、スタック上の空間を参照タイプとして返すことはできません.参照タイプで返す場合は、戻り値のライフサイクルは関数に制限されない(すなわち、関数のライフサイクルより長い)必要があります.
  • 参照パラメータ効率は、空間の開拓がないため、パラメータ効率よりも高いが、参照の下位層での実現はポインタと同じであり、すなわち、アドレスと参照の効率はそれほど悪くないが、参照はポインタよりも安全である.
  • 伝引用時に実参を修正したくなければconstで修飾する引用
  • const int &&a=10;マルチレベルリファレンスではなく、右値リファレンスと呼ばれます.6.インライン関数:inlineで修飾された関数をインライン関数と呼び、コンパイル時にC++コンパイラがインライン関数を呼び出す場所で展開し、関数スタックのオーバーヘッドがなく、インライン関数がプログラムの実行効率を向上させる.では、インライン関数とマクロ関数は機能的に似ていますが、なぜインライン関数を導入するのでしょうか.cでマクロ関数を使用する場合は、すべての変数にかっこを付ける必要があります.そうしないと、式の結果が予想と異なる可能性があります.これにより、コードのリスクが増加します.その2つのマクロは、前処理で置換され、デバッグが不便で、タイプ検出のプロセスがありません.インライン関数はコンパイル時に置換されるので、マクロ関数より安全です.
  • は、c++でconstで定義された定数でマクロを置き換え、マクロ関数をインライン関数で置き換えます.
  • インライン関数は空間で時間を変える方法なので、コードが長い場合や再帰的な場合はインライン関数を使用することをお勧めしません.inlineキーワードはコンパイラにとってただのアドバイスで、インライン関数として適切でない場合、コンパイラはインラインを無視します.
  • inlineでは、関数をインラインするときにファイルの役割ドメインを持つ定義と宣言は推奨されません.7.autoキーワード(c++11)auto修飾キーワードコンパイラは、そのタイプを自動的に倒します.
  • autoは、1行で複数の変数を定義する場合、タイプが同じである必要があります.
  • autoは関数のパラメータとしても配列autoの第2の用法を定義することはできない:範囲に基づくforループ
    int arr[]={1,2,3,4,5};
    for(auto & e : arr)
    e*=2;