728x90
1. 개요
오늘은 함수에 const가 앞 뒤 매개변수일때 어떤 결과가 나오는지 알아봅시다.
2. 반환값 const
먼저 반환값 const에 대해서 알아보도록 하겠습니다.
보통 함수를 정의를 할 경우 void int double 등 여러가지의 반환 타입으로 정의합니다.
하지만 앞에 const가 붙은 함수일 경우에는 어떻게 될가요?
const int sum(int a, int b)
{
return a + b;
}
이런 형식을 가지고 있습니다.
그냥 간단합니다 반환을 상수로 반환하겠다 라는 뜻 입니다.
보통은 잘 안쓰지만 이런 경우에는 쓸수도 있습니다.
const int& sum(int a, int b)
{
return a + b;
}
이런 경우에는 참조값으로 반환이기 때문에 const를 붙여줘야합니다.
안그러면 return a+b가 에러가 나올 뿐더러 만약 return a만 하더라도 메인에서
int main()
{
sum(5)++;
}
이런 코드도 가능하기 때문입니다.
3. 함수 뒤 const
함수 뒤에 const는 구조체나 class에서 맴버 변수를 사용하지 못하게 막기 위해 나온 상수입니다.
예시를 보겠습니다.
class A
{
public:
int y;
int x;
int getY() const
{
y = 5; // error
return y;
}
};
struct B
{
public:
int y;
int x;
int getY() const
{
y = 5; // error
return y;
}
};
int main()
{
A* a = new A();
return 0;
}
이런 경우 안에 맴버 변수를 바꾸지 못합니다.
만약 const형식으로 객체를 불렀을때는 어떻게 될가여?
class A
{
public:
int y;
int x;
void print() const
{
cout << "const print"<<'\n';
}
void print()
{
cout << "Normal print";
}
};
int main()
{
const A* a = new A();
A* b = new A();
a->print();
b->print();
return 0;
}
다른 함수가 불러지는 것이 보입니다.
const 객체들은 const 맴버함수만 호출할수 있기 떄문입니다.
하지만 일반 객체는 const가 뒤에 있는 맴버함수도 가능합니다.
class A
{
public:
int y;
int x;
void print() const
{
cout << "const print"<<'\n';
}
void print()
{
cout << "Normal print";
}
void setY(int y)
{
this->y = y;
}
};
int main()
{
const A* a = new A();
A* b = new A();
a->print();
b->print();
a->setY(5) // error
return 0;
}
4. 매개 변수 const
매개변수 const는 매개변수 값을 변경하지 못하게 막습니다.
보통 매개변수를 call by reference일때 즉 참조값으로 받을때 사용합니다.
속도는 높이고 싶은데 참조값을 변경하기 싫을때 많이 사용됩니다.
int sum(const int& a, const int& b)
{
return a + b;
}
int main()
{
cout << sum(5, 5);
return 0;
}
int sum(const int& a, const int& b)
{
a = 6;//error
b = a;//error
return a + b;
}
int main()
{
cout << sum(5, 5);
return 0;
}
'개발자 면접 공부 > C-C++' 카테고리의 다른 글
C++ 17 구조적 바인딩 (2) | 2023.09.14 |
---|---|
C++ 11 tuple (0) | 2023.09.13 |
가변길이 템플릿 (0) | 2023.09.04 |
구조체, 클래스 패딩 바이트 (2) | 2023.08.28 |
C++11,14 람다식 (2) | 2023.06.14 |