[c++/note] const ์์
๐ ์ฐธ๊ณ ์๋ฃ
[Microsoft Learn] constexpr(C++)
[Tistory - ๊ฐ๋ฐ์๋ฐ] [C++] constexpr์ด๋? const์ constexpr์ ์ฐจ์ด
๊ฐ๋
๋ณ์์ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋๋ก ์ ํํ๋ ํค์๋. ๋ณ์๋ฅผ ์ฝ๊ธฐ ์ ์ฉ(Read-Only)์ผ๋ก ๋ง๋ ๋ค.
const
ํค์๋๋ฅผ ์ฌ์ฉํด ๋ณ์๋ฅผ ์ ์ธํ๋ฉด ๋ฐ๋์ ์ด๊ธฐ ๊ฐ๋ ํจ๊ป ์ง์ ํด์ผ ํ๋ค.
const int
1
2
const int a = 10;
a = 20; // ์ค๋ฅ ๋ฐ์
const int a = 10
: ๋ณ์a
๋ฅผ ์์๋ก ์ ์ธ- ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํด
a
๋ฅผ ๊ฐ๋ฆฌํฌ ์ ์์
- ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํด
- ์ค๋ฅ ์ฝ๋:
C3892
โaโ: const์ธ ๋ณ์์ ํ ๋นํ ์ ์์ต๋๋ค.
cf) const int* const
1
2
3
4
5
const int a = 10;
const int* const ptr = &a;
ptr = &b; // ์ค๋ฅ
*ptr = 20; // ์ค๋ฅ
const int*
: ๊ฐ๋ฆฌํค๋ ๊ฐ์ด ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅconst int* const
: ํฌ์ธํฐ ์์ฒด๋ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅ- ๊ฐ๊ณผ ์ฃผ์ ๋ชจ๋ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅ (๊ฐ๊ณผ ํฌ์ธํฐ๊ฐ ๋ชจ๋ ์์)
(const int*) const
๋ก ์ดํดํ์!const int*
๋ฅผconst
ํ ๊ฒ
์ปดํ์ผ๋ฌ ๋์ ๊ณผ์
์ปดํ์ผ ํ์ ์์
1
2
3
4
5
6
7
const int MAX = 10;
int main()
{
int a[MAX];
std::cout << MAX << std::endl;
}
MAX
์ ๊ฐ์ด10
์ผ๋ก ํ์ โก๏ธ์ปดํ์ผ๋ฌ๋
MAX
๊ฐ ์๋ ๋ชจ๋ ์์น์10
์ ๋์ ํ ์ ์๋ค!MAX
๋ ์คํ ์ค์ ๋ณ๋์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น๋ฐ์ง ์์ (์ค์ ๋ณ์ x)
์ปดํ์ผ ํ์์ ๊ฐ์ด ๊ฒฐ์ ๋ ๋ณ์๋ฅผ ์์๊ฐ์ผ๋ก ์นํ๋ ์ ์๋ค.
์ปดํ์ผ๋ฌ๋ ์์๋ฅผ ์ง์ ๋ณ์์ ๋์ ํด ๋ถํ์ํ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ์ ์ค์ธ๋ค.
์ปดํ์ผ๋ฌ๊ฐ const
๋ณ์๋ฅผ ์นํํ์ง ์๋ ๊ฒฝ์ฐ, ์ผ๋ฐ์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ์ดํฐ ์์ญ์ ์ ์ฅ๋จ!
๋ฐํ์ ์์
์ปดํ์ผ๋ฌ๊ฐ ์์๋ก ์ด๊ธฐํํ์ง ์๋ ๊ฒฝ์ฐ, const
๋ณ์๋ ์ผ๋ฐ์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ์ดํฐ ์์ญ์ ์ ์ฅ๋๋ค.
1
2
3
4
5
int main()
{
const char* a = "hi";
std::cout << a << std::endl;
}
- ๋ฌธ์์ด ๋ฆฌํฐ๋ด
"hi"
๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ์ดํฐ(rodata)์ ์ ์ฅ - ํฌ์ธํฐ ๋ณ์
a
๋"hi"
์ ์ฃผ์ ์ ์ฅโก๏ธ์คํ์ ์ ์ฅ! - ์ปดํ์ผ๋ฌ๋
a
์ ๋ฌธ์์ด์ ์ฃผ์ ํ ๋น
์ปดํ์ผ ํ์ vs ๋ฐํ์
const
์ปดํ์ผ๋ฌ๊ฐ ์ด๊ธฐํ o
const int a = 10
์ปดํ์ผ๋ฌ๊ฐ ์ด๊ธฐํ x (๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ ์์ญ์ ์ ์ฅ)
static const int a = 10
const char* a = "hi"
const int a[] = {1};
cf) constexpr
์ปดํ์ผ ํ์์ ๊ฐ์ ํ์ ํ ์ ์๋ ๊ฒฝ์ฐ, constexpr
๋ก ์ ์ธํ ์ ์๋ค.
1
constexpr int a = 10;
- ์ปดํ์ผ ํ์์
a = 10
๊ฐ ํ์ - ์ปดํ์ผ๋ฌ๊ฐ
a
์ ๋ชจ๋ ์์น์10
์ผ๋ก ์ด๊ธฐํ
- ์ปดํ์ผ๋ฌ๊ฐ
๋จ, ์ปดํ์ผ๋ฌ๊ฐ ๊ฐ์ ํ์ ํ ์ ์๋ ๊ฒฝ์ฐ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
1
2
3
4
5
6
7
8
9
int main()
{
int a = 10;
constexpr int b = a;
std::cout << b << std::endl;
}
/* ๋น๋ ๊ฒฐ๊ณผ */
// (์ค๋ฅ) C2131: ์์ด ์์๋ก ๊ณ์ฐ๋์ง ์์์ต๋๋ค.
a
๋ ๋ฐํ์์์ ๊ฐ์ด ๊ฒฐ์ ๋จconstexpr
์ ์ปดํ์ผ ํ์์์ ๋ฐ๋์ ๊ฐ์ด ๊ฒฐ์ ๋์ด์ผ ํ๋ฏ๋ก ์ค๋ฅ ๋ฐ์(
const
๋ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌ)
๋ชจ๋ constexpr
๋ณ์๋ const
๋ณ์์ด๋ฏ๋ก, ํฌํจ๊ด๊ณ๋ก ์๊ฐํ์!