반응형

C++/C++ 특수 강좌 & 모던 C++ 5

C++20 Concepts 알아보기 (1)

환영합니다, Rolling Ress의 카루입니다. ​ 오늘은 C++20에 드디어 추가된 concept에 대하여 알아보겠습니다. 템플릿 매개변수에 제약을 거는 거죠. ​ concept이란, 템플릿을 사용할 때 일정한 타입들을 묶어주는 기능이라고 생각하는 게 편합니다. 타입 이름에 별칭을 붙여주는 동시에, 그 자체로 bool값을 가지게 되죠. 에 있는 is_same_v 와 같이 ~_v 변수랑 비슷하다고 보시면 됩니다. 다만, 변수가 아니라 타입으로 쓸 수 있습니다. ​ 선언은 이렇게 합니다. template //반드시 template 필요 concept 컨셉이름 = bool값의 식 또는 requires 구문 // Concepts TS 시절에는 아래와 같은 구문도 지원했으나, 이제는 지원하지 않습니다. // ..

[C++20 특수 강좌] 선택문 최적화를 위한 [[likely]], [[unlikely]]

선택지가 2개 있으면, 그 중 하나를 고를 확률은 일반적으로 50%가 되겠죠. 그러나, 하나가 훨씬 많이 선택될 게 불보듯 뻔한 상황이 있어도, 컴파일러는 그걸 모릅니다. 개발자가 직접 알려줘야 하죠. ​ 그래서 이번에 새로 등장한 특성 [[attribute]] 이 바로 likely입니다. std::cout input; input == 0) { } else { } 위 경우에는 압도적으로 0이 많을 겁니다. 하지만 if문에서 0이 가장 위에 있고, 가장 먼저 실행될 것이니 별 필요성이 느껴지지 않죠. 다음과 같은 경우라면 어떨까요? std::cout input; input) { case 1: break; case 2: break; case 3: [[fallthrough]]; case 4: exit(0); ..

C++ 캐스팅 연산자 성능 비교

안녕하세요, 오늘은 C++의 형변환(캐스팅) 연산자의 성능을 알아보겠습니다. static_cast dynamic_cast reinterpret_cast (type)obj // C-style cast type(obj) // functional cast(변환 생성자 이용) CA클래스를 상속받는 CB클래스를 만들고, who_am_I 메서드를 만들어서 제대로 되었는지 확인해 보겠습니다. 각각 1억번씩 형 변환 테스트를 해보겠습니다. 코드는 위가 싱글스레드, 밑에가 멀티스레드 입니다. #include #include #include #include using namespace std; class CA { public: CA() = default; virtual void who_am_I() const { cout

[C++20 특수 강좌] constexpr을 넘어선 consteval

C++11인가요? constexpr 키워드를 통해 함수나 변수에 사용이 가능했습니다. 변수에 사용하면 constexpr + const 효과를 통해 컴파일 타임에 상수로 고정이 되는 역할을 했죠. 매크로를 대체할 수 있었습니다. 함수에 사용하면 inline 효과를 내고, 템플릿 메타 프로그래밍(TMP)와 같이 가독성이 떨어지는 코드를 대체할 수 있었습니다. ​ 하지만 constexpr 함수는 문제가 있죠. inline함수처럼 프로그래머가 constexpr로 선언해도 조건에 부합하지 않으면 암묵적으로 런타임에 실행됩니다. ​ 그런 문제를 해결하기 위해 consteval이 나왔습니다. constexpr보다 좀 더 강력한 키워드라고 보시면 됩니다. consteval은 컴파일 타임에 표현 가능한 식이 아니면 오류..

[C++심화 강좌] C++20 모듈 사용하기

환영합니다, Rolling Ress의 카루입니다. ​ 처음에는 무척 기다렸고 신기한 기능이었는데, 막상 추가가 되니까 생각보다 별 감흥이 없네요. 아니면 요즘 제가 UWP 앱 개발 중이라 C#에 너무 에너지를 쏟고 있는 탓인지도 모릅니다. 비주얼스튜디오에서 C#을 사용할 땐 정말 막강한 인텔리센스를 제공하죠. ​ 그래서 말인데, 오늘 할 얘기도 인텔리센스에 관해 먼저 이야기하겠습니다. 우선 몇 년 전과는 달리 최근에는 모듈 지원이 대폭 강화되면서 ixx 파일에 대한 인텔리센스도 제공이 됩니다. 심지어 모듈을 import 한 후에도 인텔리센스가 되긴 되는데, 클래스 내부 멤버들까지는 모르는 것 같아요. 컴파일은 잘 되는데 소스 편집기에서 빨간 줄이 사라지지 않는 요상한 상황이 발생합니다. ​ 아무튼, 아실..

반응형