C++いくつかのパラメータ伝達技術と提案と局所静的関数


パラメータの転送:
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&&);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ローカル静的関数を使用します.
利点は、名前の競合が起こらず、ローカルでの使用に制限され、他の場所では使用できず、グローバル関数の動作特性があることです.

#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