int num = 2010;
๋ณ์์ ์ ์ธ์ผ๋ก num1์ด๋ผ๋ ์ด๋ฆ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ํ ๋น๋๋ค.
int &num2 = num1;
์ฐธ์กฐ์์ ์ ์ธ์ผ๋ก ์ธํด num1์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ num2๋ผ๋ ์ด๋ฆ์ด ์ถ๊ฐ๋ก ๋ถ๊ฒ๋๋ค.
num1์ด ํ๋ ๋ชจ๋ ์ฐ์ฐ์ num2๋ก ํ๋ ๊ฒ๊ณผ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ธ๋ค.
๐ฉ ์ฐธ์กฐ์๋ ๊ธฐ์กด์ ์ ์ธ๋ ๋ณ์์ ๋ถ์ด๋ '๋ณ์นญ', ๋ณ์์ ์ด๋ฆ๊ณผ ์ฌ์ค์ ์ฐจ์ด๊ฐ ์๋ค.
๐ฉ ์ฐธ์กฐ์์ ์์๋ ์ ํ์ด ์์ผ๋ฉฐ, ์ฐธ์กฐ์๋ฅผ ๋์์ผ๋ก ์ฐธ์กฐ์๋ฅผ ์ ์ธํ ์๋ ์๋ค.
int num1 = 2579;
int& num2 = num1;
int& num3 = num2;
int& num4 = num3;
๐ฉ ์ฐธ์กฐ์์ ์ ์ธ ๊ฐ๋ฅ ๋ฒ์
int &ref = 20; (X) ์์ ๋์์ผ๋ก์ ์ฐธ์กฐ์ ์ ์ธ์ ๋ถ๊ฐ๋ฅ
int &ref; (X) ์ฐธ์กฐ์๋ ์์ฑ๊ณผ ๋์์ ๋๊ตฐ๊ฐ๋ฅผ ์ฐธ์กฐํด์ผ ํ๋ค.
int &ref = NULL; (X) ํฌ์ธํฐ์ฒ๋ผ NULL๋ก ์ด๊ธฐํํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅ
์ฐธ์กฐ์๋ ์ ์ธ๊ณผ ๋์์ ๋๊ตฐ๊ฐ๋ฅผ ์ฐธ์กฐํด์ผ ํ๋๋ฐ, ๊ทธ ์ฐธ์กฐ์ ๋์์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ณ์๊ฐ ๋์ด์ผ ํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ฐธ์กฐ์๋ ์ฐธ์กฐ์์ ๋์์ ๋ณ๊ฒฝํ ์ ์๋ค.
๋ณ์์ ์ฑํฅ์ ์ง๋๋ ๋์์ด๋ผ๋ฉด ์ฐธ์กฐ์ ์ ์ธ์ด ๊ฐ๋ฅํ๋ค. ์) ๋ฐฐ์ด์ ์์
int arr[3] = {1,3,5};
int& ref1 = arr[0];
int& ref2 = arr[1];
int& ref3 = arr[2];
ํฌ์ธํฐ ๋ณ์ ๋์์ ์ฐธ์กฐ์ ์ ์ธ
int num = 12;
int* ptr = &numl
int** dptr = &ptr;
int& ref = num;
int* (&pref) = ptr;
int** (&dpref) = dptr;
๐ฉ call-by-reference : ์ฃผ์๊ฐ / ์ฐธ์กฐ์ ์ด์ฉ
ํฌ์ธํฐ ptr์ ์ ๋ฌ๋ ์ฃผ์๊ฐ์ ๊ด์ ์์ ๋ณด๋ฉด ์ด๋ call-by-value
int* SimpleFunc(int* ptr) {
return ptr + 1;
}
์ฃผ์๊ฐ์ ๋ฐ์์ ์ธ๋ถ์ ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ๊ทผํ๋ฉด call-by-reference
int* SimpleFunc(int* ptr) {
if (ptr == NULL) {
return NULL;
}
*ptr = 20;
return 0;
}
์ฐธ์กฐ์๋ฅผ ์ด์ฉํ call-by-reference
๐ ๋งค๊ฐ๋ณ์ : ํจ์๊ฐ ํธ์ถ๋ ๋ ์ ์ธ์ด ๋๋ ๋ณ์๋ก, ํจ์์ ํธ์ถ ๊ณผ์ ์์ ์ ์ธ๊ณผ ๋์์ ์ ๋ฌ๋๋ ๋์์ผ๋ก ์ด๊ธฐํ๋๋ค. ์ฆ, ๋งค๊ฐ๋ณ์์ ์ ์ธ๋ ์ฐธ์กฐ์๋ ์ฌ์ ํ ์ ์ธ๊ณผ ๋์์ ์ด๊ธฐํ๋๋ค.
int main(void){
int val1 = 10;
int val2 = 20;
SwapByRef(val1, val2);
cout << "val1 : " << val1 << endl;
cout << "val2 : " << val2 << endl;
return 0;
}
void SwapByRef(int &ref1, int &ref2){
int temp = ref1;
ref1 = ref2;
ref2 = temp;
}
๐ฉ const ์ฐธ์กฐ์
ํจ์์ ์ ์ ํํ์ ํจ์์ ํธ์ถํํ๋ฅผ ๋ณด์๋ ๋ณ๊ฒฝ ์ ๋ฌด๋ฅผ ์ ์ ์๋ค.
์ด๋ฅผ ์๋ ค๋ฉด HappyFunc ํจ์์ ๋ชธ์ฒด ๋ถ๋ถ์ ํ์ธํด์ผ ํ๋๋ฐ, ์ด๋ ํฐ ๋จ์ ์ด๋ค (๊ตณ์ด)
// ํจ์ ํธ์ถ
int num = 24;
HappyFunc(num);
// ํจ์ ์ ์
void HappyFunc(int &ref){}
const ์ฌ์ฉ
ํจ์ HappyFunc ๋ด์ ์ฐธ์กฐ์ ref๋ฅผ ์ด์ฉํ ๊ฐ์ ๋ณ๊ฒฝ์ ํ์ฉํ์ง ์๊ฒ ๋ค๋ ์๋ฏธ
๐ ์ฅ์
ํจ์์ ์ํ ์ ์ธ๋ง ๋ด๋ ๊ฐ์ ๋ณ๊ฒฝ์ด ์ผ์ด๋์ง ์์์ ํ๋จ ๊ฐ๋ฅ
์ค์๋ก ์ธํ ๊ฐ์ ๋ณ๊ฒฝ์ด ์ผ์ด๋์ง ์๋๋ค.
void HappyFunc(const int& ref){}
const int num = 20;
int &ref = num; // error
ref += 10;
cout << num << endl;
// solution
const int num = 20;
const int& ref = num;
const int& ref = 50;
2๋ฒ์งธ ์ค ๐ ref๋ฅผ ํตํ ๊ฐ์ ๋ณ๊ฒฝ์ ํ์ฉํ๋ค๋ ๋ป (num์ ํ์ฌ const์ด๊ธฐ ๋๋ฌธ์ ํ์ฉ๋์ง ์์)
๋ฐ๋ผ์, ํ ๋ฒ const ์ ์ธ์ด ๋ค์ด๊ฐ๊ธฐ ์์ํ๋ฉด ๊ด๋ จํด์ ๋ช๋ช ๋ณ์๋ค์ด const๋ก ์ ์ธ๋์ด์ผ ํ๋๋ฐ, ์ด๋ ํ๋ก๊ทธ๋จ์ ์์ ์ฑ์ ๋์ด๋ ๊ฒฐ๊ณผ๋ก ์ด์ด์ง๊ธฐ ๋๋ฌธ์, const ์ ์ธ์ ๋น๋ฒํ ํ๋ ๊ฒ์ ์ข์ ์ต๊ด์ด๋ค.
const ์ฐธ์กฐ์๋ ์์๋ฅผ ์ฐธ์กฐ ๊ฐ๋ฅํ๋ค. ์ด๋ป๊ฒ? const int& ref = 30;
์์๋ฅผ const๋ก ์ฐธ์กฐํ ๊ฒฝ์ฐ, ์์๋ฅผ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์์์ ์ผ๋ก ์ ์ฅํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ฆ, ํ์ ๋ฐ๊ฟ๋ ์๋ฉธํ์ง ์๋๋ค. ๋งค๊ฐ๋ณ์ํ์ด ์ฐธ์กฐ์์ธ ๊ฒฝ์ฐ์ ์์๋ฅผ ์ ๋ฌํ ์ ์๋๋ก ํ๊ธฐ ์ํจ์ด๋ค.
int Adder(const int& num1, const int& num2){
return num1+num2;
}
๐ฉ ๋ฐํํ์ด ์ฐธ์กฐ, ๋ฐํ๋ ์ฐธ์กฐ๋ก ๋ฐ๋ ๊ฒฝ์ฐ
๋ฐํํ : int & RefRetFuncOne
๋ฐํ : int & num2
int & RefRetFuncOne(int& ref){
ref++;
return ref;
}
int main(void){
int num1 = 1;
int& num2 = RefRetFuncOne(num1);
num1++;
num2++;
return 0;
} // ๊ฒฐ๊ณผ ๋ชจ๋ 4, num1 = num2 = ref
๐ฉ ๋ฐํํ์ ์ฐธ์กฐ, ๋ฐํ์ ๋ณ์๋ก ๋ฐ๋ ๊ฒฝ์ฐ
๋ฐํํ : int & RefRetFuncOne
๋ฐํ : int num2
int & RefRetFuncOne(int& ref){
ref++;
return ref;
}
int main(void){
int num1 = 1;
int num2 = RefRetFuncOne(num1);
num1+=1;
num2+=100;
return 0;
} // num1 = ref = 3, num2 = 102
๐ฉ ์ฐธ์กฐ๋ฅผ ๋์์ผ๋ก ๊ฐ์ ๋ฐํ
์ฐธ์กฐ์๋ฅผ ๋ฐํํ๊ฑด, ๋ณ์์ ์ ์ฅ๋ ๊ฐ์ ๋ฐํํ๊ฑด, ๋ฐํํ์ด ์ฐธ์กฐํ์ด ์๋๋ผ๋ฉด ์ฐจ์ด๊ฐ ์๋ค.
์ด์ฐจํผ ์ฐธ์กฐ์๊ฐ ์ฐธ์กฐํ๋ ๊ฐ์ด๋ ๋ณ์์ ์ ์ฅ๋ ๊ฐ์ด ๋ฐํ๋๊ธฐ ๋๋ฌธ
int main(void){
int num1 = 1;
int num2 = RefRetFuncTwo(num1);
num1 += 1;
num2 += 100;
cout << num1;
cout << num2;
return 0;
}
int RefRetFuncTwo(int &ref){
ref++;
return ref;
}
๋ฐํํ์ด ์ฐธ์กฐํ์ธ ๊ฒฝ์ฐ์๋ ๋ฐํ๋๋ ๋์์ ์ฐธ์กฐ์๋ก ๊ทธ๋ฆฌ๊ณ ๋ณ์๋ก ๋ฐ์ ์ ์๋ค.
๐ int num2 = RefRetFuncOne(num1); (O)
๐ int &num2 = RefRetFuncOne(num1); (O)
๊ทธ๋ฌ๋ ๋ฐํํ์ด ๊ฐ์ ํํ๋ผ๋ฉด, ์ฐธ์กฐ์๋ก ๊ทธ ๊ฐ์ ๋ฐ์ ์ ์๋ค.
๐ int num2 = RefRetFuncTwo(num1); (O)
๐ int &num2 = RefRetFuncTwo(num1); (X)
๐ฉ ์๋ชป๋ ์ฐธ์กฐ ๋ฐํ
์ง์ญ๋ณ์๋ฅผ ์ฐธ์กฐ์ ํํ๋ก ๋ฐํํ๋ ๊ฒ
ref๊ฐ ์ฐธ์กฐํ๋ ๋์์ด ์๋ฉธ๋๋ค.
int& RetuRefFunc(int n){
int num = 20;
num += n;
return num;
}
int &ref = RetuRefFunc(10);
'๐ฉโ๐ป ํ๋ก๊ทธ๋๋ฐ > ๐ C++' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C++] ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ (0) | 2024.04.17 |
---|---|
[C++] ๊ตฌ์กฐ์ฒด(Struct) | ํด๋์ค์ ๊ฐ์ฒด (0) | 2024.04.17 |
[C++] ํ๋ก๊ทธ๋จ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ | C++ ํ์ค ํค๋ (0) | 2024.04.17 |
[C++] const | new & delete | friend | static (0) | 2024.04.17 |
[C++] ์ด๋ฆ๊ณต๊ฐ(namespace) | ๋ฒ์์ง์ ์ฐ์ฐ์ (0) | 2024.04.14 |