학습 내용
1. 상수 = 리터럴... 따라서 참조 안됨.
2. 배열도 참조 안됨.
1. 상수는 리터럴이다. 참조가 안된다.
int a = 5;
int& b = a; // a의 별칭 b를 만든것이다.
b = 4; // b = a = 4
- 위와같이 하면 a = 4로 바뀐다.
int& a = 4;
- 이건 안된다. 이게 되면, 아래처럼 되어버릴 수 있기때문
int& a = 4; // 이게 원래 안되는것임.
a = 5;
- 그러면 4가 5로 바껴야한다 (말이 안된다)
- const로 참조는 가능하다.
const int& a = 4; // a를 변형시키지 않겠습니다!
int b = a;
이런식의 사용은 가능!
- 추가예시
int& FuncOne(int &a){
a++;
return a;
}
int FuncTwo(int &a){
a++;
return a;
}
1-A>
int num1;
int num2 = FuncOne(num1);
1-B>
int num1;
int &num2 = FuncOne(num1);
1-A와 1-B의 차이를 알겠는가?
1-A에서는 값의 복사가 이뤄진다. num1과 num2는 별개의 변수가 된다!
1-B에서는, num1의 별칭으로 num2가 등록된다.
2-A>
int num1;
int num2 = FuncTwo(num1);
2-B>
int num1;
int &num2 = FuncTwo(num1); // 에러!!!!!!!!!
둘의 차이를 알겠는가?
참고로 애초에 FuncTwo는 rvalue (리터럴 상수라고 이해하면 쉽다.)을 리턴한다.
2-A에서는, num2에선 FuncTwo가 반환한 임시변수의 값이 복사되어 num2에 저장된다.
즉, num1과 num2는 애초에 다른 변수이다!
2-B에서는,
참조자는 상수를 저장 할 수 없으므로, 애초에 컴파일 에러가 나는 구문이다!
2. 배열 참조 안됨
배열은 실제 메모리에 데이터를 저장하는 것이고, 참조는 메모리를 차지하지 않기 때문에, 말이 안되는것이다.
- 배열에 굳이 참조 하고싶다면, 배열을 우선 선언하고(메모리를 만들고), 참조를 거는 방법이 있다.
출처
정리가 잘되어 있다. 나 스스로도 정리해보자.
'Programming > C++' 카테고리의 다른 글
Class 객체 선언 방식 2가지 (0) | 2021.01.01 |
---|---|
C++ 캡슐화, 디폴트 생성자, new, 복사생성자 (0) | 2020.12.27 |
구조체 (0) | 2020.12.27 |
C++ 코드최적화 (0) | 2020.12.26 |
Const(상수) (0) | 2020.12.26 |
댓글