C++におけるint iとint&iの注意点
2003 ワード
1.int i伝値,int&i伝引用
int iはパラメータを巻き戻しませんが、int&iはパラメータを巻き戻しできます.
2.int iは定数を付与できるが、int&iは付与できない
3.int&iは別名に相当し、int iはコピーのみ
最後に例を見てみましょう
コンピュータで実行すると、最初の数字は正常で、2番目の数字は明らかに定義されていない値です.例えば、私が実行した結果は
45 1400458944
これは,オブジェクトを構築する際にコンストラクション関数を呼び出し,Aのコンストラクション関数のパラメータが伝達されるため,呼び出すと1つのコンストラクション関数に相当する.
存在するが、i 2(b)は
私たちはもう1段のプログラムを貼って、上の1段に対応して、ただ、今回、私たちは4560の結果を得ることができます
int iはパラメータを巻き戻しませんが、int&iはパラメータを巻き戻しできます.
#include <iostream>
void test1(int i)
{
i = 7;
}
void test2(int &i) // , const
{
i = 7;
}
int main()
{
int t1 = 10;
test1(t1);
std::cout << t1 << std::endl; // 10
int t2 = 10;
test2(t2);
std::cout << t2 << std::endl; // 7
return 0;
}
2.int iは定数を付与できるが、int&iは付与できない
#include <iostream>
void test1(int i)
{
i = 7;
}
void test2(int &i)
{
i = 7;
}
int main()
{
int i = 10; //
int &i1 = 10; //
test1(10); //
test2(10); //
return 0;
}
3.int&iは別名に相当し、int iはコピーのみ
#include <iostream>
int main()
{
int t1 = 10;
int t2 = 10;
int i1 = t1; //
int &i2 = t2; //
i1 = 7;
i2 = 7;
std::cout << t1 << std::endl; // 10
std::cout << t2 << std::endl; // 7
return 0;
}
最後に例を見てみましょう
#include <iostream>
class A{
public:
A(int a, int b):i1(a),i2(b){};
public:
int i1;
int &i2;
};
int main()
{
A a(45,60);
std::cout << a.i1 << " " << a.i2 << std::endl;
return 0;
}
コンピュータで実行すると、最初の数字は正常で、2番目の数字は明らかに定義されていない値です.例えば、私が実行した結果は
45 1400458944
これは,オブジェクトを構築する際にコンストラクション関数を呼び出し,Aのコンストラクション関数のパラメータが伝達されるため,呼び出すと1つのコンストラクション関数に相当する.
int b = 60
存在するが、i 2(b)は
int &i2 = b;
コンストラクション関数呼び出しが完了すると、bの役割ドメインが終了し、bが破棄され、i 2が破棄された場所を指すため、未定義の実行結果が現れる.私たちはもう1段のプログラムを貼って、上の1段に対応して、ただ、今回、私たちは4560の結果を得ることができます
#include <iostream>
class A{
public:
A(int a, int &b):i1(a),i2(b){};
public:
int i1;
int &i2;
};
int main()
{
int t = 60;
A a(45,t);
std::cout << a.i1 << " " << a.i2 << std::endl;
return 0;
}