μƒˆμ†Œμ‹

λ°˜μ‘ν˜•
C++/문법

C++ μƒμˆ˜ μ§€μ • (const, constexpr, consteval)

  • -
λ°˜μ‘ν˜•

πŸ‘‰ ν¬μŠ€νŒ… λ‚΄μš©

  • μ˜€λŠ˜μ€ Const, Constexpr, Consteval의 역할에 λŒ€ν•΄μ„œ μ•Œμ•„λ³΄λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.

πŸ‘‰ μ‚¬μš©ν•΄μ•Ό ν•˜λŠ” 이유

μš°λ¦¬κ°€ 배열을 생성할 λ•Œ ν•œ κ°€μ§€ 문제점이 μžˆμŠ΅λ‹ˆλ‹€.
λ°”λ‘œ λ°°μ—΄μ˜ ν¬κΈ°λŠ” "컴파일 μ‹œκ°„"에 κ²°μ •λ©λ‹ˆλ‹€.
κ·Έλ ‡λ‹€λŠ” μ˜λ―ΈλŠ” μ•„λž˜μ˜ μ½”λ“œλŠ” 싀행이 λΆˆκ°€λŠ₯ν•˜λ‹€λŠ” μ˜λ―Έμž…λ‹ˆλ‹€.
 
βœ… μ½”λ“œ

#include <iostream>

const int GetSize(int a)
{
	return a + 5;
}

int main()
{
	int array[GetSize(5)];
}

 
βœ… μ‹€ν–‰κ²°κ³Ό

// Error λ°œμƒ
// 식에 μƒμˆ˜ 값이 μžˆμ–΄μ•Όν•©λ‹ˆλ‹€.
// 식이 μƒμˆ˜λ‘œ κ³„μ‚°λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μ΄λŸ¬ν•œ μ—λŸ¬μ½”λ“œλŠ” λ„μš°λ©° 싀행이 μ•ˆλ  κ²ƒμž…λ‹ˆλ‹€.
μ‹ κΈ°ν•˜κ²Œλ„.. GetSize() ν•¨μˆ˜λŠ” const intλ₯Ό λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜μΈλ° 말이죠.
ν•΄κ²° λ°©μ•ˆμ€ 2κ°€μ§€κ°€ μžˆμŠ΅λ‹ˆλ‹€.

  1. 동적 배열을 λ§Œλ“€μ–΄μ„œ νž™ μ˜μ—­μ— ν• λ‹Ή
  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" ν˜ΈμΆœμ—μ„œ μœ ν˜Έν•œ μƒμˆ˜ 식이 μƒμ„±λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

이처럼 컴파일 μ‹œκ°„μ— κ²°μ •λ˜μ§€ λͺ»ν•˜λŠ” λ¬Έλ²•μ˜ 경우 μ—λŸ¬λ₯Ό λ°œμƒμ‹œν‚΅λ‹ˆλ‹€.
 

λ°˜μ‘ν˜•

'C++ > 문법' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

C++ mallocκ³Ό new의 차이  (0) 2024.02.17
C++ string_view  (0) 2024.02.16
C++ ꡬ쑰적 바인딩(Structured Bindings)  (0) 2024.02.15
C++ Initializer_list  (0) 2024.02.14
C++ 균일 μ΄ˆκΈ°ν™” (Uniform Initialization)  (0) 2024.02.13
Contents

ν¬μŠ€νŒ… μ£Όμ†Œλ₯Ό λ³΅μ‚¬ν–ˆμŠ΅λ‹ˆλ‹€

이 글이 도움이 λ˜μ—ˆλ‹€λ©΄ 곡감 λΆ€νƒλ“œλ¦½λ‹ˆλ‹€.