SW 그리고 아빠 엔지니어링 중...

아는 만큼 보이고, 경험해봐야 알 수 있고, 자꾸 써야 내 것이 된다.

300x250

cpp core guidelines 5

람다는 왜 사랑인가? 💕(람다의 동작 원리)

🗨️ 본 글은 람다의 동작 원리를 알아보는 내용으로, 람다 표현식은 함수형 프로그래밍의 핵심 요소인데 C++에서 이러한 패러다임을 접목한 이유를 엿보고, 이를 통해 더욱 유용하게 사용되길 바란다.* 람다 사용방법을 모르면 이해하기 어려울 수도 있기에 생성형 AI로 람다 사용법에 대한 가이드를 첨부하니 아래 더보기로 열어놓고 보아도 좋겠다. 더보기람다란? 1. 람다 함수의 기본 개념과 구문람다 함수는 이름 없는 함수(익명 함수)로, 코드 내에서 간결하게 함수를 정의하고 사용할 수 있게 해 줍니다. 기본 구문:[캡처절](매개변수) -> 반환타입 { 함수 본문 } 간단한 예:auto add = [](int a, int b) -> int { return a + b; };int sum = add(3, 4); ..

🚀성능 최적화 도구 - constexpr과 inline 함수 이해하기

🗨️ 프로그래밍에서 성능 최적화는 매우 중요한 주제이며 지금 얘기하는 내용들은 체감할 정도의 성능개선이 아니다. 하지만 constexpr과 inline 이 두 키워드의 의미와 사용법에 대해 알게 된다면 기계어 동작 간소화와 오버헤드를 절약하는 이점을 취하고, 기존 레거시 코드에 constexpr과 inline 도구를 잘 못 사용하여 성능을 저하시키고 있는 문제를 개선하게 될지도 모른다. 🤓 constexpr: 컴파일 시간의 마법📜 C++ core guidelines F.4: 함수가 컴파일 시간에 평가되어야 한다면 constexpr로 선언하라 constexpr란?📌 constexpr 발음을 어느 교수님께 배우느냐에 따라 조금씩 다르게 알던데 저는 뭐 '콘스트 익스퍼'라로 부르고 있다. constex..

🤔 스마트 포인터(unique_ptr, shared_ptr) 생성 시 make_shared(or make_unique)를 써야 하는 이유?

Q1. 스마트 포인터 unique_ptr, shared_ptr를 모른다.Q2. 스마트 포인터 unique_ptr, shared_ptr 생성 방법은?Q3. make_shared(or make_unique)를 써야 하는 이유는?* 3가지 질문에 대한 답을 알고 있다면 이 글을 읽지 않아도 된다. 😎🛫shared_ptr 생성 시에는 std::make_shared를 써라!C++에서 메모리 할당/해제는 의도치 않은 많은 이슈를 양산하기에 RAII(Resource acquisition is initialization)가 되는 걸 사용하라고 한다. 그중 하나인 shared_ptr에 대해 조금 알아보자. sample#include #include struct Point{ int x; int y; P..

남들 쓰듯이 쓰는 virtual이라면 고민할 필요 없는 알쓸 virtual 정보 📖

virtual은 컴파일 타임과 실행 타임 동작이 다르다.가상함수는 기본 값 설정을 하지 말자. (제발 ㅜㅜ) 가상함수에 기본 값을 세팅하는 데 기저 클래스와 파생 클래스에서 기본 값이 다르면 어떻게 될까? 🤔아래 예시는 이를 확인해 볼 수 있는 코드인데 동작 결과를 예측해 보자.example#includeclass Base{public: virtual void foo(int a = 10) { std::cout foo(); //1.}resultDerived : 10 예상했던 결과 값인가?💬 그냥, '제발 가상함수는 기본 값을 설정하지 말자'로 끝내고 싶지만 발생할 수 있는 문제점은 이해하고 넘어가는 게 좋을 테니 정리를 해보자. 우선 가상함수 컴파일 과정은 다음과 같다.컴파일러는 컴파일 시점에 vtab..

'0' 대신 'nullptr'를 써야 하는 이유

💬 C++ Core Guidelines에서는 '0' 혹은 'NULL'보다는 'nullptr'를 사용하라고 권장하고 있는데, 권장하기에 사용하기보다는 왜 nullptr를 쓰는 게 나은지 다양한 방법으로 알아보자.nullptr를 써야 하는 이유널포인터 대신 0을 사용하면서 오류가 발생한다.사례 1Exampleint main() { int* p1 = 0; int* p2 = nullptr;} 위 코드는 문제없이 p1, p2에 널 포인트가 대입이 된다. 다음 예제도 문제가 없는지 검토해 보자.Example void foo(int* p) {} int main(){ int n = 0; foo(0); //1 ?? foo(n); //2 ??} 주석의 결과를 확인해 보면 다음과 같다.주석 1 : ..

320x100
300x250