[GeeksForGeeks C++ 문제풀이] References(참조)

Jin Hur·2022년 10월 25일
0

C++

목록 보기
15/18

https://www.geeksforgeeks.org/c-plus-plus-gq/references-gq/

Q1. 재귀함수 내에서의 참조


Q2. 참조 특징

  • 참조는 널일 수 없다.
  • 참조는 선언과 동시에 초기화되어야 한다.
  • 한번 초기화되어 다른 객체를 참조하고 있는 참조변수를 다른 객체로 참조할 수 없다. 즉 reset할 수 없다.
  • 상수도 참조할 수 있다.
    • const 참조 변수를 통해 상수 또한 참조할 수 있다.
		// 컴파일 에러
		//const int& r = 10; // r = 100;	 // r은 현재 rvalue이므로 컴파일 에러 발생
		
        // 컴파일 성공
		const int i = 100;
		const int& r2 = i;

Q3. 복사 생성자의 매개변수가 참조형인 이유

class AAA {
public:
	AAA(const AAA& a) {
    	.. 복사 생성자 구현
    }
}

복사 생성자도 엄연한 함수이다. 복사 생성자에서 값으로 인수를 전달하면(복사 생성자의 파라미터가 참조형이 아니라면) 복사 생성자에 대한 호출이 호출 체인으로 이어질 수 있다(복사 생성자 -> 복사 생성자 -> 복사 생성자..).
따라서 컴파일러는 매개변수가 값으로 전달되는 것을 허용하지 않는다.


Q4. 참조 반환과 static 변수

함수가 참조를 반환할 때 이를 lvalue처럼 사용할 수 있다.
변수 x는 static 변수이기에 프로그램 종료 시점까지 Data 영역에 남아있다.
그리고 변수 x는 static 변수이기에 모든 함수 블록에서 접근할 수 있고, 또한 static int x = 10;은 오직 한 번만 실행된다.


Q5. 지역변수 참조 반환

함수 func()에서 지역변수에 대한 참조를 반환한다. 함수 호출 이후 반환된 메모리 공간에 대해 func() = 30; 과 같이 접근하게 되고, 이는 결국 세그멘테이션 폴트와 같은 런타임 에러를 유발한다.

반환된 메모리 공간에 접근 => 허용되지 않은 공간에 접근했다는 의미로 '세그멘테이션 폴트'를 유발할 수 있다.


Q6. 참조

0개의 댓글

관련 채용 정보