목록C++ (19)
NeuroWhAI의 잡블로그
포인터의 타입이 달라도 같은 인스턴스를 가리키고 있다면 주소는 다 같을 줄 알았는데 아니더라고요. #include class Mother { public: virtual void foo1() { } int a; }; class Father { public: virtual void foo2() { } int b; }; class Child : public Mother, public Father { public: int c; }; int main() { Child c; Mother* m = &c; Father* f = &c; if ((void*)&c == (void*)m) { std::cout
가짜 공유란 캐시 코히런스 때문에 시스템이 실제로 공유되고 있지 않은 캐시 데이터를 동기화하는 행위 또는 그로 인해 발생하는 성능 하락을 말합니다. 얼마전 책에서 읽었는데 충격적인지라 기억에 남습니다. 그냥 바로 코드를 봅시다. (주의: 하드웨어 환경에 따라 결과가 상이할 수 있음) 코드 및 결과 : https://wandbox.org/permlink/Nr8F51OgbILBiIUw #include #include #include using namespace std; using int64 = long long int; constexpr int64 NUMBERS = 1000000000LL; volatile int64 num1 = 0; volatile int64 num2 = 0; void job1() { fo..
https://en.cppreference.com/w/cpp/language/structured_binding Structured binding은 C++17에서 추가된 문법입니다.한글로는 뭐라고 해야할지 모르겠네요. 구조적 바인딩?구조체나 배열 등이 가지는 멤버들을 풀어서 바인딩(변수에 할당)할 수 있게 해주는 편의 문법입니다. 가장 간단한 예를 들자면 int arr[3] = { 1, 2, 3 }; auto [a, b, c] = arr; cout
https://en.cppreference.com/w/cpp/language/operator_comparison#Three-way_comparisonhttps://en.cppreference.com/w/cpp/language/default_comparisons 비교연산자...라네요...a b 일때a b면 0보다 크다는 것을 의미하는 객체(greater)를,a == b면 0을 의미하는 객체(equivalent)를 반환한다고 합니다.왜 0보다 작은 값이면 값이지 객체냐고 물으신다면 저도 모릅니다(?)int같은 타입이 반환형이 아니고 std::strong_ordering, std::weak_ordering 등의 클래스에 정의된 상수를 반환한다고 하..
https://en.cppreference.com/w/cpp/language/class_template_argument_deduction "The syntax of a user-defined deduction guide is the syntax of a function declaration with a trailing return type, except that it uses the name of a class template as the function name""user-defined deduction guide는 템플릿 클래스를 함수 이름으로 사용한다는 것만 빼면'->'를 사용해 반환형을 명시한 함수 선언 문법입니다." 이름을 좀 더 길지만 알기 쉽게 쓰자면User-defined template a..
https://en.cppreference.com/w/cpp/thread/lock_tag https://en.cppreference.com/w/cpp/thread/lock_tag_t mutex 헤더에 정의되어 있는 이 3개의 lock tag들은 mutex를 받는 표준 라이브러리 함수나 객체가 해당 mutex를 어떻게 취급할지 지정할 수 있게 해줍니다. defer_lock : 뮤텍스를 잠그지 않습니다. try_to_lock : 뮤텍스를 잠그려고 시도합니다. (이미 잠겨있다면 대기하지 않고 실패합니다) adopt_lock : 이미 뮤텍스가 현재 스레드에 의해 잠겨있다고 가정합니다. (=잠그지 않습니다) 이걸 어디다 쓰느냐... 하실 수 있지만 생각해봅시다. 두 뮤텍스 a, b를 한번에 잠궈야할 일이 생긴다고..
참고 : https://stackoverflow.com/a/8111750 ADL은 말 그대로 인수에 의존해 이름 공간을 검색하는 기능입니다. 긴 말 필요없고 코드부터 봅시다. 12345678910111213141516171819202122232425262728#include #include namespace foo{ struct Bar { int data; }; void init(Bar& bar) { bar.data = 42; }} int main(){ //using foo::init; //using namespace foo; foo::Bar bar; init(bar); std::cout
Q 러닝 설명 : https://ko.wikipedia.org/wiki/Q_%EB%9F%AC%EB%8B%9D Q Learning은 DQN의 뼈대가 되는 학습 방법입니다. 저는 공부 순서가 반대로 되어버렸지만 Q Learning을 알고 DQN을 공부했다면 더 쉽게 가지 않았을까.. 싶네요. Q Learning으로 강화 학습의 Hello, World!라고 할 수 있는 Frozen Lake 게임을 학습시켜 보았습니다. 아래 코드에서 대부분은 Frozen Lake 게임을 구현하는 코드(FrozenLake 클래스)나 출력 코드이고중요한 학습은 QLearner 클래스의 learn 메소드에서 이뤄집니다. 코드: 12345678910111213141516171819202122232425262728293031323334..
아래 링크는 읽어보시면 좋을 것들. execution.h : http://en.cppreference.com/w/cpp/header/execution policy : http://en.cppreference.com/w/cpp/algorithm/execution_policy_tag_t stackoverflow : https://stackoverflow.com/a/47706880 C++17에 추가된 표준이라고 합니다. 다 테스트는 안해봤는데 아직 제대로 지원하는 컴파일러를 못찾았습니다. 직역하면 '실행 정책'이 되겠네요. 알고리즘을 순차적으로 실행할지 병렬적으로 실행할지 선택권을 줍니다. 예를 들어서 C++17 버전의 std::sort를 보면 이렇게 ExecutionPolicy를 받는 버전이 추가됬는데 여기..