반응형
지난 포스팅에는 C++에서의 스트링과 포인터 그리고 동적 메모리에 대하여 알아보았는데요.
2021.08.18 - [C++] - [C++] 1.2.1 ~ 1.2.2 스트링 & 포인터와 동적 메모리
이번 포스팅에서는 C++ 뿐만 아니라 JavaScript에서도 보았을 const에 대하여 알아보도록 하겠습니다!
C++는 대표적인 객체지향 언어로 유명하죠!
따라서 매개변수로 const를 사용하여 함수의 인자로 보내는 경우가 많다고 합니다.
시작해보겠습니다!
1.2.3 const의 다양한 용도
- const 키워드에 대한 면접 질문으로 좋음! 잘 알아두면 좋다.
- 각각의 용도는 서로 관련되어 있지만 미묘한 차이가 있다.
const 상수
- C언어에서는 #define 구문을 사용하여 변경하지 않을 값을 정의 해주었다.
- C++에서는 상수를 const로 정의하는것이 바람직하다!
// const 상수
const int versionNumMajor = 2;
const int versionNumMinor = 1;
const std::string productName = "Super Hyper Net Modulator";
const 매개변수
- C++ 에서는 const가 아닌 변수를 const로 캐스팅이 가능하다.
- 이를 통해서 다른 코드에서 변수를 변경하지 않도록 보호가 가능하다.
// const 매개변수 예제
void func(const std::string* someString) {
*someString = "Test" // 컴파일 에러
}
int main() {
std::string myString = "abc";
func(&myString);
return 0;
}
1.2.4 레퍼런스(참조)
- 참조를 사용하면 기존 변수에 새 이름을 지정할 수 있다.
// 레퍼런스 사용 예제
int x = 25;
int& xReference = x;
- 변수의 타입 뒤에 &를 붙이면 그 변수는 레퍼런스가 된다.
- 내부적으로 원본 변수에 대한 포인터로 취급하므로 x와 xReference는 같은 값을 가리킨다.
- 둘 중 한 변수라도 수정이 되면 둘다 값이 바뀐다.
레퍼런스 전달 방식
- pass by value(값 전달 방식)
- 함수의 매개변수에 정수를 전달
- 함수 안에는 그 정수의 복제본 전달
- 함수 안에서는 원본 변수의 값을 변경할 수 없음
- pass by reference(레퍼런스(참조)전달 방식)
- C++에서는 값 전달 방식보다 뛰어난 방식을 사용함.
- 매개변수가 포인터값이 아닌 레퍼런스로 전달
- 함수 안에서 원본 변수의 값도 변경 가능
const 레퍼런스 전달 방식
- C++에서는 함수의 매개변수를 const 레퍼런스로 전달하는 코드를 자주 볼 것이다.
- 이를 사용하는 가장 큰 장점은 바로 성능 이다.
- 포인터를 사용하기 때문에 원본을 복제할 필요가 없고, const로 전달하기 때문에 원본 변수가 변경되지도 않는 장점이 있기 때문이다.
- 특히 객체를 다룰 때 유용하다.
// const 레퍼런스로 전달하는 예시
void printString(const std::string& myString){
std::cout << myString << std::endl;
}
int main() {
std::string someString = "Hello";
printString(someString);
printString("Hello"); // 리터럴 전달 가능
return 0;
}
이상입니다!
반응형
'🌈 프로그래밍 > C++' 카테고리의 다른 글
[C++] 타입 추론에 대하여 (0) | 2021.08.20 |
---|---|
[C++] 1.2.4 ~ 1.2.5 레퍼런스와 익셉션 (2) | 2021.08.19 |
[C++] 1.2.1 ~ 1.2.2 스트링 & 포인터와 동적 메모리 (0) | 2021.08.18 |
[C++] 1.1.15 이니셜라이저 리스트 (0) | 2021.08.17 |
[C++] 1.1.14 반복문 (2) | 2021.08.13 |