C ++プライマー第6章機能(1)

6.1基底関数

この関数は、我々は関数を呼び出すことによって、対応するコードを実行し、名前の付いたコードブロックです。関数は、ゼロ以上のパラメータを有することができ、および(通常は)結果を生成します。
典型的な関数定義は、以下の部分を含む:戻り型、関数名、及び機能リストはそのゼロ個以上の仮パラメータで構成されています。
関数呼び出しの2つのジョブ:まず、二番目のパラメータの初期化引数に対応する機能、および、呼び出された関数への制御の移行を使用します。この場合、関数呼び出しの実行が中断され、呼び出された関数が始まりました。
最初のステップは、(暗黙的に)そのパラメータを定義し、初期化関数の実行です。return文に直面したときに、関数の実行を終了します。return文はまた、2つのジョブ:戻り値のreturn文、第二には、呼び出し元の関数に呼び出された関数からの制御の移行です。
実際のパラメータのタイプ
引数パラメータは、関数呼び出しパラメータを所定量と形状パラメータの実際の量と一致し、対応するパラメータの型と一致しなければならない引数の型の初期値です。
形状関数パラメータリストの
パラメータリストが空であってもよいが、省略することができない、空のパラメータリストに記述することができ、キーワードがボイドを表す関数のパラメータなしで使用してもよいです。
パラメータリストのパラメータは、典型的には、各パラメータが指定子を含む宣言である、カンマで区切られました。
関数型を返し
、ほとんどの種類は、関数の戻り値の型として使用することができます。戻り値の特殊なタイプは、関数は値を返しませんを示す、無効です。
型を返すことができない機能は配列型または関数型であるが、配列または関数ポインタへのポインタであってもよいです。

6.1.1ローカル変数

C ++言語では、名前はスコープ、オブジェクトのライフサイクルを持っています。スコープの名前は、プログラム・テキストの一部であり、名前とは、目に見える、オブジェクトの寿命は、しばらくの間、被験者の実行の過程で存在します。
および内部パラメータ関数本体定義された変数は、と呼ばれるローカル変数関数の範囲でのみ見えます。
オブジェクトの外部で定義プログラムの実行全体のすべての機能に存在します。プログラムの起動時にプログラムの終了が破壊されるまで、このようなオブジェクトは、作成されます。
自動オブジェクト
我々はブロックの実行中にターゲットにのみ存在は、自動オブジェクトと呼ばれます。オブジェクトの値を自動的にブロックで作成されたブロックの実行後に不定となります。
パラメータは、自動オブジェクトです。関数のパラメータ記憶スタートの適用は、関数終了すると、パラメータが破壊されます。
ローカル静的変数
、プログラムの実行パス内のオブジェクトの定義文、初期化後初めてのローカル静的変数、およびプログラムは、オブジェクトが配置されている場合でも、それが機能終了の実行には影響しません、その間、終了するまでにのみ破壊されました。ローカル変数は、それによって、そのようなオブジェクトを取得する静的タイプとして定義することができます。

6.1.2関数の宣言

関数の名前は、関数が一度だけ定義することができますが、複数回宣言することができ、変数と同様に、使用前に宣言する必要があります。
関数本体のない関数の宣言は、セミコロンで置き換えることができます。彼らは関数本体を含んでいないので、これは必要パラメータ名がありません。
3つの要素は、すべての情報が、関数呼び出しを説明するのに必要な、(戻り型は、関数名、パラメータ・タイプ)のインタフェース機能について説明機能します。また、関数型関数宣言と呼ばれます。
関数はヘッダファイルで宣言されたソースファイルで定義されなければなりません。ソース・ファイルは、関数ヘッダファイルが含まれ関数の宣言を含まなければならない定義されています。

6.1.3分割コンパイル

分割コンパイルは、私たちは、各ファイル分割コンパイルに複数のファイルにプログラムを分割することができます。
コンパイルとリンク複数のソース・ファイル:実際の機能にあるfact.cppファイル、main.cppに、main関数内にありますが、これら2つの関数はヘッダファイルhead.hで宣言され、主な機能には、実際の関数を呼び出します。

6.2パラメータの受け渡し

これは、パラメータに、各関数呼び出しを再作成、およびパラメータの初期化のための引数の渡しとなります。
パラメーターが参照型である場合、それは対応する引数に結合し、そうでない場合、コピーの値は、パラメータ引数に割り当てます。パラメータが参照型である場合には、我々は、対応する引数がされていると言う参照渡しまたは関数である参照による呼び出し
引数の値をパラメータにコピーされ、されている場合、パラメータの引数は、2つの独立したオブジェクトです。私たちは、この引数がされていると言う値を渡すまたは関数があるコール・バイ

6.2.1パスのパラメータ値

関数の形状は、すべての動作パラメータは、引数には影響を与えません。関数は、引数の値は、呼び出し元関数のパラメータが破壊された後、一定の引数の値を、パラメータ、関数の実行時のパラメータ変更を初期化するために使用される、と呼ばれています。たとえば、コール事実(i)はIの値を変更しません
パラメータポインタ
ポインタは、コピー操作、コピーポインタ値を行います。
ここに画像を挿入説明
リセット機能を呼び出した後、引数がオブジェクトを参照するには0に設定されていますが、引数自体は変更されません。

6.2.2参照引数

参照パラメータは参照パラメータは、1つ以上の引数の値を変更する機能を実行したことで、その結合標的を初期化します。
ここに画像を挿入説明
ここに画像を挿入説明
あなたがリセット機能を呼び出すと、jは引数で、関数が私のパラメータの参照であるjはちょうど別の名前であり、iとjのバインド、そうJ、J変更のために使用されている私のものの内部使用をリセットします。
参照コピーの使用を避け
、大きな、比較的非効率的なコピークラス型オブジェクトまたはコンテナオブジェクトを、さらにいくつかのクラスタイプは、コピー操作をサポートしていません。好ましくは、一定の基準宣言である基準パラメータ値を変更することなく機能する場合。
使用参照パラメータが追加情報を返す
機能を一つの値だけを返しますが、時には関数が参照パラメータを返す複数の結果は、私たちのために効果的な方法を提供し、複数の値を返す必要がありますすることができます。関数に渡すことができる、それは我々が必要とする情報を保存するように、追加の参照引数です。
ここに画像を挿入説明

6.2.3 constの引数パラメータと

引数を持つ場合には、初期化パラメータは、トップレベルのconstを無視します。パラメータはそれをオブジェクトの一定量を渡し、トップCONSTを有するか、またはオブジェクトと、それは非常に可能です。
ここに画像を挿入説明
フォーム間のconstポインタまたは参照は
その逆ではない、一定の基準またはポインタ定数のため、量は非常に初期化することができるされている非定数下地CONSTオブジェクトを初期化するために使用することができるが、通常の参照またはポインタが同じでなければなりませんオブジェクトの初期化の種類、あなたは、通常の初期定数を使用することはできません。
ここに画像を挿入説明
以下の形態が通過するルールが適用されるのと同じ初期化パラメータで使用可能な
ここに画像を挿入説明
一定の基準を利用する
(共通の)基準として定義されたパラメータを変更しない機能は、共通の間違い、機能DOの呼び出し元であります誤解を招く、すなわち、その関数は、引数の値を変更することができます。また、参照const参照引数が大幅に許容される機能のタイプを制限します。たとえば、私たちは、リテラルまたはオブジェクトの共通の参照パラメータをキャストする必要がconstオブジェクトを渡すことはできません。

6.2.4配列パラメータ

数组的两个特殊性质对我们定义和使用作用在数组上的函数有影响,这两个性质分别为:不允许拷贝数组以及使用数组时通常会将其转换成指针。
ここに画像を挿入説明
如果我们传给print函数的是一个数组,则实参自动地转换成指向数组首元素的指针,数组的大小对函数的调用没有影响。
以数组作为形参的函数也必须确保使用数组时不会越界。因为数组是以指针的形式传递给函数的,所以一开始函数并不知道数组的确切尺寸,调用者应该为此提供一些额外信息。管理指针形参有三种常用的技术。
使用标记指定数组长度
管理数组实参的第一种方法是要求数组本身包含一个结束标记,例如C风格字符串,存储在字符数组中并且最后一个字符后面跟着一个空字符。
ここに画像を挿入説明
这种方法适用于那些有明显结束标记且该标记不会与普通数据混淆的情况。
使用标准库规范
管理数组实参的第二种技术是传递指向数组首元素和尾元素的指针。
ここに画像を挿入説明
调用函数时要传入指向首元素和尾元素下一位置的指针,可以使用begin和end函数。
显式传递一个表示数组大小的形参
第三种管理数组实参的方法是专门定义一个表示数组大小的形参。数组j的大小可有end(j)-begin(j)获得。
ここに画像を挿入説明
数组形参和const
当函数不需要对数组元素执行写操作时,数组形参应该是指向const的指针。只有当函数确实要改变元素值的时候,才把形参定义成指向非常量的指针。
数组引用形参
形参也可以是形参的引用,引用形参绑定到数组上。(&arr两端的括号必不可少,若没括号,则将arr声明成了引用的数组)
ここに画像を挿入説明
この使用法は、事実上、印刷機能の利用可能性を制限している、我々はサイズ10の配列の役割で機能のみすることができます。セクション16.1.1は、任意のサイズの配列を渡す参照パラメータの種類を記載しています。

6.2.5メイン:処理コマンドラインオプション

基準変形可能な含有6.2.6機能

関数の引数の異なる数を処理するために書き込むには、C ++ 11の新しい標準は、主に2つのメソッドを提供します。すべて同じ引数の型を渡すことができる場合initializer_listタイプは、標準ライブラリと呼ばれる、引数の型ではない場合同じ、我々は特別な機能、いわゆる可変パラメータテンプレート(16.4導入)を書くことができます。パラメータの特別な種類(即ち省略記号)は、可変数の引数を転送することができ、そこです。
initializer_listパラメータ
initializer_listライブラリは、特定のタイプの値を表すために使用される配列の標準タイプです。initializer_listタイプは、同じ名前のヘッダファイルに定義されています。
ここに画像を挿入説明常に一定の値になりますinitializer_listオブジェクト要素は、我々はinitializer_listオブジェクトの値を変更することはできません。
あなたは順番に渡されたinitializer_listパラメータの値にしたい場合は、シーケンスは、中括弧のペアで配置する必要があります:
ここに画像を挿入説明
ここに画像を挿入説明
initializer_listパラメータを含むことも、同時に他のパラメータの機能を持たせることができます。
楕円パラメータ
省略記号パラメータ特定ののC ++プログラムのCのコードセットへのアクセスを容易にするために、コードは標準Cライブラリ関数が可変引数と呼ばれる使用しています。
楕円パラメータのみをパラメータリストの最後の位置に表示され、パラメータフーは、実際の必要性の型チェックに対応するパラメータ省略されています
ここに画像を挿入説明

公開された16元の記事 ウォン称賛11 ビュー631

おすすめ

転載: blog.csdn.net/qq_42820853/article/details/104569989