๋งค๊ฐ๋ณ์ ์ค๋ฒ๋ก๋ฉ์ const๋ฅผ ๊ตฌ๋ถํ๋์ฉ?
void print(int val)
void print(const int val)
๋งค๊ฐ๋ณ์์ const ์ฌ๋ถ์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ํธ์ถ๊ฐ๋ฅํ๋์?
์ด๊ฑด ๊ฒ์ํด๋ณด๋๊น ์๋๊ณ ๋ ํผ๋ฐ์ค๋ ํฌ์ธํฐ๋ ๋๋ค๋ ์๋ฆฌ๊ฐ ์๋๋ฐ ๊ทธ๋ผ
void print(int& val)
void print(const int& val)
์ด๊ฑด const ์ฑ์ผ๋ก ๋ค๋ฅด๊ฒ ํธ์ถ๋๋์?
๋ฆฌํด๊ฐ์ ๋ ์ด๋ค๊ฐ์
const int plus(int x, int y)
int plus(int x, int y)
์ ๋ด๋ ๋ค๋ฅด๊ฒ ํธ์ถ ๋๋์?
์ด๋ฐ ์ง๋ฌธ ํ๋ ์ด์ ๊ฐ C++ vector๋ฅผ ์ง์ ์ค๊ณํด๋ณด๋ ค๊ณ ํ๋๋ฐ ๋ ํผ๋ฐ์ค ์ฐพ์๋ณด๋๊น
T& operator[](int index) {
return data_[index];
}
const T& operator[](int index) const {
return data_[index];
}
์ด๋ ๊ฒ ์ฐ์ฐ์ ์ค๋ฒ๋ก๋ฉ ํ๋ผ๊ณ ํ๋๋ผ๊ณ
const T& ์ T& ๋ ๋ฆฌํด๊ฐ์ const์ฑ๋ง ๋ค๋ฅธ๋ฐ ์ปดํ์ผ๋ฌ๊ฐ ์ด๋ป๊ฒ ๊ตฌ๋ถํ๋๊ณ ๋ฌผ์ด๋ณด๋๊น
const vector<T>๋ ์๋๊บผ vector<T>๋ ์์๊บผ ํธ์ถํ๋ค๋ค ใ c++ ๋๋ฌด ํท๊ฐ๋ฆผ
์ค๋ช ํ๊ธด ๋๋ฌด ๊ธธ๊ณ ๊ฐ๋จํ๊ฒ ๋งํ๋ฉด ํจ์์ const๋ฅผ ๋ถ์ด๋๊ฒฝ์ฐ๋ ์ค๋ฒ๋ก๋ฉ์ด ๊ฐ๋ฅ
https://learn.microsoft.com/ko-kr/cpp/cpp/function-overloading?view=msvc-170
์์ธํ ์๊ณ ์ถ๋ค๋ฉด ์ฌ๊ธฐ๋ก
์ผ๋จ ์๋ ค์ค์ ใฑใ ๊ทผ๋ฐ ์ฝ์ด๋ด๋ ๊ธด๊ฐ๋ฏผ๊ฐํ๋น.. ๊ฒฐ๋ก ์ ์ผ๋ก ํฌ์ธํฐ๋ ๋ ํผ๋ฐ์ค๋ ๊ทธ๋ผ const๋ก ์ค๋ฒ๋ก๋ฉ ๋๊ณ ๊ฐ์ ์๋๋๊ฑฐ์ฃ ? ๋ฆฌํด๊ฐ์ ๋น์ฐํ ์ค๋ฒ๋ก๋ฉ ๋ชปํ๋๊ฑฐ๊ณ ๊ทธ๋ผ ์ ๊ฑฐ ๋ฆฌํด๊ฐ const๋ก ๊ตฌ๋ถํ๋๊ฑด ๊ด๋ จ ๋ด์ฉ ์ด๋์ ์ฝ์ด๋ด์ผ๋จ? ์ฐ์ฐ์ ์ค๋ฒ๋ก๋ฉ์๋ง ์ ์ฉ๋๋ ๊ท์น์ธ๊ฐ? ์ง๊ด์ ์ผ๋ก๋ ์์ const๋ถ์ด๋ฉด lvalue ์ทจ๊ธ๋๋๊ฑฐ ๋ง์์ผ ํด์ ์ ๋ฐ์์ผ๋ก ๋์ผ๋๊ฒ ๋ค๋๊ฑด ์ดํด๋ ํ๋๋ฐ ์๋ฆฌ๊ฐ ์ด๋ป๊ฒ ๋๋์ง ๋ชจ๋ฅด๊ฒ์
https://learn.microsoft.com/ko-kr/cpp/cpp/function-overloading?view=msvc-170#argument-type-differences
์ฌ๊ธฐ๋ณด๋ฉด
๊ทธ๋ฅ ๋๋๊ฑฐ ์๋?
๊ทธ๋ฅ์ด๋ const๋ volatile์ด๋ ๋ค ๋๋๊ฑฐ ๊ฐ์๋ฐ?
์ฐพ์๋ณด๋๊น ๊ฐํ์ ์ const๋ก ์๋๊ณ ๋ ํผ๋ฐ์ค, ํฌ์ธํฐ๋ const๋ก ์ค๋ฒ๋ก๋ฉ ๋จ ๊ทผ๋ฐ ์ ค ๊ณจ๋๋ฆฌ๋๊ฒ ์ธ์๊ฐ ๊ฐ์๋ ํจ์๋ค์ const ๋ถ๋๊ฑธ๋ก ์ค๋ฒ๋ก๋ฉ์ด ๋๋ค const ํจ์๋ const ๊ฐ์ฒด๋ก ์ ์ธํ๊ฒฝ์ฐ์๋ const ํจ์ํํ ๋ง ๊ฐ๋๋ผ.. ์ด๊ฑฐ ์ข ๊ณจ๋๋ ธ์.. ๊ทผ๋ฐ ํ๋ ๋ฐฐ์ ๋ค ๋์ค์ ์จ๋จน์ ์ผ ์์์ง๋ ๋ชจ๋ฅด๊ฒ ๋ค