멤버 함수가 멤버 변수들을 수정하지 않는다면 const 로 선언하는 것이 자연스럽다. 그런데 스레드를 사용한다면 문제가 생길 수 있다. 예시를 통해 살펴보자. mutex의 사용 다음은 다항식의 근을 구는 함수 roots 를 구현하는 상황이다. 성능 향상을 위해 캐싱을 이용하였으며, rootsAreValid 의 값을 이용하여 캐싱 여부를 판별하는 함수이다. class Polynomial { public: using RootsType = std::vector; RootsType roots() const { if(!rootsAreValid) { ... rootsAreValid = true; } } private: mutable bool rootsAreValid{ false }; mutable RootsType..
constexpr 은 객체에 적용했을때는 const 가 되며, 이 값은 컴파일 시점에 알려진다. 컴파일 시점에 알려지는 값들은 읽기 전용 메모리에 배치될 수 있다. 또 다른 장점으로는 컴파일 시점에 정수 상수 표현식이 요구되는 문맥에서 사용할 수 있다는 것이다. 어떤 경우에 사용할 수 있는지 예제를 통해 알아보자. int sz; // 비 constexpr 변수 ... constexpr auto arraySize1 = sz; // error std::array data1; // error constexpr auto arraySize2 = 10; // 10은 상수 std::array data2; // arraySize2는 constexpr 객체 여기서 알아야할것은 constexpr 이 아닌 const 로 선..
- Total
- Today
- Yesterday
- Future
- C
- Overloading
- CPP
- 포인터
- async
- detach
- 보편참조
- thread
- Modern
- 보편 참조
- C++11
- Forwarding
- std::forward
- Perfect
- Unreal
- const
- Effective Modern C++
- forward
- Join
- 다이소
- 발아시기
- std::move
- Override
- 람다
- auto
- Effective
- MOVE
- C++
- C++14
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |