C++いくつかのパラメータ伝達技術と提案と局所静的関数
2034 ワード
パラメータの転送:
1正式なパラメータが変数を参照している場合にのみ、伝達された変数を直接修正し、他の場合はcopy(ポインタの場合を含む)を伝達するだけです.
参照パラメータは定数パラメータを渡さない
void update(const float&i)に変更できます.大丈夫です.2つ目のエラーも発生しません.これはコンパイラが許可しています.
2配列について、参照パラメータを使用する主な目的はテンプレートに適用することです.これにより、配列要素の数を推定できます.
配列パラメータを渡すには、通常、2つのパラメータ、配列名、要素の数を使用しますが、次の例のように、2つのパラメータを必要とせずに配列を渡すことができます.
パラメータを渡すにはどうすればいいですか?提案:[1]Usepass-by-value for small objects.小さなオブジェクト(int、doubleなどのオブジェクトを指す)に対して値伝達を使用する[2]Usepass-by-const-reference to pass large values that you don't need to modify.定数参照変数パラメータは、変更する必要のない大きな値(カスタムクラスオブジェクトを指す)に使用します.[3] Return a result as a return value rather than modifying an object through an argument.パラメータを使用して変更したオブジェクトの値を渡すよりも、戻り値を使用します.[4]Use rvalue references to implement move and forwardingは、右参照変数パラメータを使用して転送し、移動および転送機能を実行する.右値パラメータはvoid f(vector&&);2つの&番号[5]Pass a pointer if‘‘no object’is a valid alternative(and represent‘no object’by nullptr).オブジェクトがない場合を考慮すると、ポインタを用いる、NULLはオブジェクトがないことを表し、C++11はnullptrを用いる[6]Usepass-by-reference only if you have to.参照変数パラメータを使用して渡す必要があります.
3ローカル静的関数を使用します.
利点は、名前の競合が起こらず、ローカルでの使用に制限され、他の場所では使用できず、グローバル関数の動作特性があることです.
結果は次のとおりです.
n == 0, x == 0 n == 1, x == 0 n == 2, x == 0
1正式なパラメータが変数を参照している場合にのみ、伝達された変数を直接修正し、他の場合はcopy(ポインタの場合を含む)を伝達するだけです.
参照パラメータは定数パラメータを渡さない
void update(float& i);
void g(double d, float r)
{
update(2.0f); // ,
update(r); // OK
update(d); // , !
}
void update(const float&i)に変更できます.大丈夫です.2つ目のエラーも発生しません.これはコンパイラが許可しています.
2配列について、参照パラメータを使用する主な目的はテンプレートに適用することです.これにより、配列要素の数を推定できます.
配列パラメータを渡すには、通常、2つのパラメータ、配列名、要素の数を使用しますが、次の例のように、2つのパラメータを必要とせずに配列を渡すことができます.
template<class T, int N> void f(T(&r)[N])
{
// ...
}
int a1[10];
double a2[100];
void g()
{
f(a1); // T is int; N is 10
f(a2); // T is double; N is 100
}
パラメータを渡すにはどうすればいいですか?提案:[1]Usepass-by-value for small objects.小さなオブジェクト(int、doubleなどのオブジェクトを指す)に対して値伝達を使用する[2]Usepass-by-const-reference to pass large values that you don't need to modify.定数参照変数パラメータは、変更する必要のない大きな値(カスタムクラスオブジェクトを指す)に使用します.[3] Return a result as a return value rather than modifying an object through an argument.パラメータを使用して変更したオブジェクトの値を渡すよりも、戻り値を使用します.[4]Use rvalue references to implement move and forwardingは、右参照変数パラメータを使用して転送し、移動および転送機能を実行する.右値パラメータはvoid f(vector
3ローカル静的関数を使用します.
利点は、名前の競合が起こらず、ローカルでの使用に制限され、他の場所では使用できず、グローバル関数の動作特性があることです.
#include<iostream>
using namespace std;
void f(int a)
{
while (a--) {
static int n = 0; // initialized once
int x = 0; // initialized ’a’ times in each call of f()
cout << "n == " << n++ << ", x == " << x++ << '
';
}
}
int main()
{
f(3);
//cout<<n<<endl; n。
return 0;
}
結果は次のとおりです.
n == 0, x == 0 n == 1, x == 0 n == 2, x == 0