일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- dfs
- back propagation
- NEXT
- pytorch
- lazy propagation
- tensorflow
- 우선 순위 큐
- dropout
- 문자열
- 너비 우선 탐색
- 가끔은 말로
- DP
- object detection
- 자바스크립트
- 조합론
- 플로이드 와샬
- 이분 탐색
- 다익스트라
- 가끔은_말로
- BFS
- 2023
- c++
- 백트래킹
- 분할 정복
- 세그먼트 트리
- Overfitting
- 알고리즘
- 회고록
- 미래는_현재와_과거로
- 크루스칼
- Today
- Total
Doby's Lab
[C++] 참조자(&)에 대하여, 포인터와는 전혀 다른 개념 본문
https://draw-code-boy.tistory.com/101
이 문제를 풀면서 솔루션을 참고하다가 공부하게 된 내용이다.
우선 &를 쓴다는 점에서 포인터라고 생각했지만 전혀 다른 개념을 사용된다.
변수의 의미는 '메모리 공간에 이름을 붙인 것'이다.
참조자는 똑같은 메모리 공간에 다른 이름을 붙인 것과 같다.
>> 즉, 어느 선언된 변수와 똑같지만 이름만 다른 것이라고 할 수 있다.
같은 메모리 공간을 공유하기 때문에 참조 변수에 연산을 해도 원래 변수에도 똑같은 연산이 된다.
#include <iostream>
using namespace std;
int main() {
int num1 = 10;
int& num2 = num1;
num2 += 10;
cout << num1 << ' ' << num2;
return 0;
}
[Output]
20 20
왜 참조자는 다른 변수 선언보다 더 빠른가?
이유는 (https://www.acmicpc.net/board/view/7686) 이 글에서 상세히 설명되어있다.
int a = b;
int &a = b;
int a = b는 새로운 메모리 할당, 값 복사를 하는데 반해, int &a = b는 주소 값만 복사를 하기 때문에 빠르다는 의견이 있었지만 더 정확한 설명에서는 컴파일러 입장에서 int &a = b는 O2 최적화로 인해 삭제가 된다고 한다.
즉, int &a = b는 컴파일이 될 때, 같은 주소 값을 쓰고 있기 때문에 b로 치환되어서 성능이 상향된다고 한다.
그에 반해 int a = b는 새로운 메모리를 할당하기 때문에 int &a = b와 차이를 보인다고 한다.
(물론 int a = b도 시간을 크게 잡아먹지 않는다.)
느낀 점
아무래도 참조자는 코딩을 할 때 결괏값을 담을 변수로 보기 편하게끔 딱 거기까지 역할로 사용할 거 같다.
포인터와는 완전 다른 개념이라는 것을 인지해두자!
참조자를 알고 나서 인지 함수 호출 방식 Call-By-Reference가 왜 더 빠른지 조금 이해가 된 거 같다.
'C++' 카테고리의 다른 글
Operator, Prefix or Postfix (전위 연산자 or 후위 연산자) (0) | 2022.03.09 |
---|---|
[C++] Merge Sort Tree를 위한 함수, merge(), vector.resize() (0) | 2022.03.02 |
[C++] memset 함수, for 문으로 초기화 시키기 귀찮을 때 (0, -1만 가능!) (0) | 2021.11.12 |
[C++] <climits> 정수 제한 헤더 파일, 자료형의 최댓값과 최솟값 (0) | 2021.11.03 |
[C++] 스택 사용할 때 유의할 점 (백준 한정) (0) | 2021.10.27 |