π ν¬μ€ν
λ΄μ©
- μ€λμ Const, Constexpr, Constevalμ μν μ λν΄μ μμ보λλ‘ νκ² μ΅λλ€.
π μ¬μ©ν΄μΌ νλ μ΄μ
μ°λ¦¬κ° λ°°μ΄μ μμ±ν λ ν κ°μ§ λ¬Έμ μ μ΄ μμ΅λλ€.
λ°λ‘ λ°°μ΄μ ν¬κΈ°λ "μ»΄νμΌ μκ°"μ κ²°μ λ©λλ€.
κ·Έλ λ€λ μλ―Έλ μλμ μ½λλ μ€νμ΄ λΆκ°λ₯νλ€λ μλ―Έμ
λλ€.
β
μ½λ
#include <iostream>
const int GetSize(int a)
{
return a + 5;
}
int main()
{
int array[GetSize(5)];
}
β
μ€νκ²°κ³Ό
// Error λ°μ
// μμ μμ κ°μ΄ μμ΄μΌν©λλ€.
// μμ΄ μμλ‘ κ³μ°λμ§ μμ΅λλ€.
μ΄λ¬ν μλ¬μ½λλ λμ°λ©° μ€νμ΄ μλ κ²μ
λλ€.
μ κΈ°νκ²λ.. GetSize() ν¨μλ const intλ₯Ό λ°ννλ ν¨μμΈλ° λ§μ΄μ£ .
ν΄κ²° λ°©μμ 2κ°μ§κ° μμ΅λλ€.
- λμ λ°°μ΄μ λ§λ€μ΄μ ν μμμ ν λΉ
- constexpr, constevalμ μ¬μ©
μ΄λ² ν¬μ€ν
μμλ 2λ²μ κ²½μ°λ‘ μ€λͺ
λλ¦¬κ² μ΅λλ€.
π μ¬μ©λ°©λ² (constexpr)
μ¬μ©λ°©λ²μ λ§€μ° κ°λ¨ν©λλ€.
κΈ°μ‘΄μ constλ₯Ό μ μλ μ리μ constexpr, consteval ν€μλλ‘ λ³κ²½ν΄μ μ¬μ©ν©λλ€.
- constexpr : μ»΄νμΌ μκ°μ νκ°κ° λ μ μμ (C++ 11λΆν° μ§μ)
- consteval : μ»΄νμΌ μκ°μλ§ νκ°λ (C++ 20λΆν° μ§μ)
β
μ½λ
#include <iostream>
constexpr int GetSize(int a)
{
return a + 5;
}
int main()
{
int array[GetSize(5)];
}
β
μ€νκ²°κ³Ό
// μ μμ μΌλ‘ μ€ν
μ΄λ κ²λ§ 보면 μΈμ constevalμ μ¬μ©ν μ§ μ λͺ¨λ₯΄κ² λλ°.. λ€μ μ½λλ₯Ό 보μμ£ !
μλ₯Ό λ€μ΄ μ»΄νμΌ μκ°μλ§ νκ°κ° λμ΄μΌ νλ ν¨μκ° μμ μ μλλ°.. μ΄λ° μν©μ λ°©μ§νκΈ° μν΄ μλ κ²μ
λλ€.
π μ¬μ©λ°©λ² (consteval)
β
μ½λ
#include <iostream>
consteval int GetSize(int a)
{
return a + 5;
}
int main()
{
int x = 10;
GetSize(x);
}
β
μ€νκ²°κ³Ό
// constval ν¨μ "GetSize" νΈμΆμμ μ νΈν μμ μμ΄ μμ±λμ§ μμμ΅λλ€.
μ΄μ²λΌ μ»΄νμΌ μκ°μ κ²°μ λμ§ λͺ»νλ λ¬Έλ²μ κ²½μ° μλ¬λ₯Ό λ°μμν΅λλ€.