cpp unit, gtest 등의 unit test 를 사용하며 생각해 볼만한 점들을 기록해 둡니다 독립성 실제 제품 코드보다 빠른 확인과 처리,디버깅 반복 ASSERT_* / EXPECT_* 로 필수/연속테스트 가능 이식성 다양한 플랫폼에서 사용가능 재사용 연관된 데이터의 연속 사용이 가능하며 그룹화 가능 속도 테스트간 공유 리소스 처리가 가능함 공유 리소스 유닛 테스트 작성 그 자체는 사실 어렵진 않지만… […]
Category: c++
c++20 future c++?
문득 c++11 이후의 c++ 11,14,17 을 흔히 모던 c++ 이라고 하지 c++20 이 표준으로 지정된 지금 c++20 은 뭐라 불러야하지.. c++11,14,17,20 모두 같은 modern 이기엔 너무 긴 시간이 아닌가..이번까지만 modern 으로 쳐주는건가…… c++ 20 의 주요 내용https://en.cppreference.com/w/cpp/compiler_support/20 현재 인지 하고 있는 내용들(정확한 기능이 아니래도 이런 이런 기능이 추가 되는구나 라고 인지하는것들) coroutines modules concept Three-way […]
Three-way comparison : c++20
<=> 3방향 비교 연산자 Three-way comparison The three-way comparison operator expressions have the form lhs <=> rhs The expression returns an object such that (a <=> b) < 0 if lhs < rhs (a <=> b) > 0 if lhs > rhs (a <=> b) == 0 if lhs and rhs are equal/equivalent. If one of the operands is of type bool and the other is not, the program is ill-formed. If both operands have arithmetic types, or if one operand has unscoped enumeration […]
default comparison : c++20
“default comparison” feature 를 기록해본다c++20 은 가장최근에 최근최근에 공인된 표준이기에 자료도적을것이고 관련자료를 만들어둘경우 유입, 공부도 더 동기부여가 될것으로 보여 따로 하나씩 기록해 두려 한다(다만 착각,실수,핑계,등으로 정확하지 않은 정보가 될 수 있어 읽어보신분들께서 의견주시면 그때그때 바로 제대로된 정보로 수정하겠습니다) Defaulting <=> automatically gives ==, !=, <, >, <=, >= C++20 has a new “default comparison” feature setup so that […]
c++ 배열보다 std::array 를 쓰자
일반적인 정적 사이즈를 선언할 경우에도 배열보다는 std::array 를 사용하는 편이 좀더 장점이 있다 c style 고정 사이즈 배열c++11 이후 std::array c style 고정 array 보다 더 많은걸 쉽게 할 수 있다stl 스타일 iterator 를 사용 할 수도있고algorithm 을 바로 적용해 sort 도 할 수 있으며당연히 관련 함수를 사용할 수 있고배열의 사이즈를 별도로 기록해두고 사용하지 않아도 […]
static_cast vs c-style cast c++ 스타일 캐스팅을 써야 해
c++ 에서는 가급적 c style cast 보다 static_castdynamic_castreinterpret_cast const_cast사용하자 이중 일단 static_cast 를 써야 하는 이유를 살펴보자 위 코드는int 형 변수 하나 char 형 변수 하나를서로 반대의 pointer 로 casting 할 경우에 대해서 테스트 한다 실제로 아래 두가지 케이스의 경우 c++ style 의 static_cast 를 사용 하며 서로 casting 될수없는 혹은 캐스팅 될수 있더라도 문제될 […]
stl 컨테이너 선택 기준
vector 랜덤 access 현재 할당 사이즈를 넘을 경우 마다 복사 비용 발생 중간 element 의 삭제,추가 시 비용 발생 reserve 사용 을 고려 iterator 가 삽입,삭제 중 정상유지 될수 없어 for 문 사용시 iterator 사용때 주의 list 연결리스트 삽입 굳이 중간에 넣어야 한다면 vector 보다 낫다 조회 vector 가 낫다 iterator 컨테이너의 삽입 삭제 동작 […]
c++(and another) compiler on website
gcc 버전별 컴파일 가능한 modern c++ feature 확인하기 곧 바뀔 현실이지만 실제 현업에서 많이 장애물이기도 하면서 현재도 많이 남아 있는 centos 에 대한 이슈로 gcc 빌드가 몇몇 회사의 몇몇 솔루션의 경우 c++ 11 의 feature 조차 제대로 사용할 수 없는 (하지만 일부는 또 사용가능한) 케이스가 많다 그때 그때 확인하거나 알고 싶을 때 유용한 사이트가 있다 […]
std::function (modern c++)
실제로 사용해보진 않았지만 기회가 되면 사용하게 될/ 하고 싶은 feature 라서 정리해둔다 일반 c 언어의 함수포인터 역활을 하는 c++11 이후 추가된 feature c++ 의 () 를 붙여 호출 가능한 모든 Callable 을 대입하거나 인스턴스로 활용할 수 있다기존의 함수 포인터는 람다, Functor(class function), 함수포인터를 모두 처리할 수 없었다 예제는 나중에… 관련 함수 :std::mem_fnstd::bindstd::placeholder
std::vector::emplace_back (modern c++)
list,deque,vector 에 사용가능한 멤버 함수 c++11 에 처음 추가 되었으며 가변인자 템플릿을 인자로 받는다인자로는 vector 의 instance / class 인 경우 생성자를 넣어 주어야 한다emplace_back 의 경우 일반 push_back 과 다르게 vector 로 복사되는 흐름이 아닌vector 에 element 가 생기는 동시에 초기값을 넣어주게되어 복사가 일어나거나 임시객체가 생성되지 않아 좀더 빠른 코드 c++17 이후의 return value […]