<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>C++ on Cigarettes &amp; Coffee</title><link>https://cignc.dev/tags/c++/</link><description>Recent content in C++ on Cigarettes &amp; Coffee</description><generator>Hugo</generator><language>ko-kr</language><lastBuildDate>Thu, 02 Jul 2026 02:45:32 +0900</lastBuildDate><atom:link href="https://cignc.dev/tags/c++/index.xml" rel="self" type="application/rss+xml"/><item><title>🏃 Modern C++ - 4. chrono</title><link>https://cignc.dev/posts/modern-cpp/04-chrono/</link><pubDate>Thu, 02 Jul 2026 02:45:32 +0900</pubDate><guid>https://cignc.dev/posts/modern-cpp/04-chrono/</guid><description>&lt;ul&gt;
&lt;li&gt;이전 글: &lt;a href="../03-variadic-templates/"&gt;🏃 Modern C++ - 3. Variadic Templates&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="chrono"&gt;&lt;code&gt;&amp;lt;chrono&amp;gt;&lt;/code&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;C++ 표준 시간 관련 라이브러리&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;clock 클래스&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;system_clock&lt;/code&gt;: 기본 clock이며, 시스템의 시간을 나타냄, C의 &lt;code&gt;time_t&lt;/code&gt;와 호환 가능&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;steady_clock&lt;/code&gt;: 시간 역행이 불가능한 clock. 정확한 현재 시간을 이용할 필요가 있는 경우 이용&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;high_resolution_clock&lt;/code&gt;: Windows / Linux에서 제공하는 clock. 정밀도 가장 높음&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;주요 메소드&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;now()&lt;/code&gt;: clock의 현재 시간을 나타내는 &lt;code&gt;time_point&lt;/code&gt;를 반환&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;operator+&lt;/code&gt;, &lt;code&gt;operator-&lt;/code&gt;: &lt;code&gt;duration&lt;/code&gt;을 반환&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;duration_cast&amp;lt;duration 지정 시간 단위&amp;gt;(duration)&lt;/code&gt;: 템플릿의 시간 단위로 &lt;code&gt;duration&lt;/code&gt;을 변환하여 반환(&lt;code&gt;&amp;lt;chrono&amp;gt;&lt;/code&gt;의 메소드)&lt;/p&gt;</description></item><item><title>🏃 Modern C++ - 3. Variadic Templates</title><link>https://cignc.dev/posts/modern-cpp/03-variadic-templates/</link><pubDate>Sat, 27 Jun 2026 01:53:53 +0900</pubDate><guid>https://cignc.dev/posts/modern-cpp/03-variadic-templates/</guid><description>&lt;ul&gt;
&lt;li&gt;이전 글: &lt;a href="../02-template-meta-programming/"&gt;🏃 Modern C++ - 2. Template Meta Programming&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;C에서는 &lt;code&gt;&amp;lt;stdarg.h&amp;gt;&lt;/code&gt;와 파라미터 팩(&lt;code&gt;...&lt;/code&gt;)을 이용하여 가변 길이 인자를 사용할 수 있었다. C++에서도 C-Style을 동일하게 사용할 수 있으나, C++ 11 이후로는 &lt;strong&gt;가변 길이 템플릿과 파라미터 팩을 이용하여 타입에 더 강한 가변 길이 인자를 구현할 수 있다.&lt;/strong&gt; 가변 길이 템플릿은 아래와 같이 사용한다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;template&lt;/span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;typename&lt;/span&gt; T&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;void&lt;/span&gt; print(T arg)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; std&lt;span style="color:#f92672"&gt;::&lt;/span&gt;cout &lt;span style="color:#f92672"&gt;&amp;lt;&amp;lt;&lt;/span&gt; arg &lt;span style="color:#f92672"&gt;&amp;lt;&amp;lt;&lt;/span&gt; std&lt;span style="color:#f92672"&gt;::&lt;/span&gt;endl;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;template&lt;/span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;typename&lt;/span&gt; T, &lt;span style="color:#66d9ef"&gt;typename&lt;/span&gt;... Types&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;void&lt;/span&gt; print(T arg, Types... args)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; std&lt;span style="color:#f92672"&gt;::&lt;/span&gt;cout &lt;span style="color:#f92672"&gt;&amp;lt;&amp;lt;&lt;/span&gt; arg &lt;span style="color:#f92672"&gt;&amp;lt;&amp;lt;&lt;/span&gt; std&lt;span style="color:#f92672"&gt;::&lt;/span&gt;endl;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; print(args);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;가변 길이 템플릿은 일반적으로 위 코드의 하나의 인자를 가진 &lt;code&gt;print&lt;/code&gt;처럼 베이스 케이스 함수와 함께 사용한다.&lt;/strong&gt; 파라미터 팩이 없는 함수가 더 우선 순위가 높기 때문에 오버로드된다. 또한 C++은 현재 위치의 앞에 있는 내용만 정의되기 때문에 &lt;strong&gt;베이스 템플릿 함수는 가변 길이 템플릿 함수보다 앞서 정의되어야 한다.&lt;/strong&gt; 아래에서 볼 Fold 표현을 이용하여 더 간단하게 구현할 수도 있다.&lt;/p&gt;</description></item><item><title>🏃 Modern C++ - 2. Template Meta Programming</title><link>https://cignc.dev/posts/modern-cpp/02-template-meta-programming/</link><pubDate>Fri, 26 Jun 2026 01:54:46 +0900</pubDate><guid>https://cignc.dev/posts/modern-cpp/02-template-meta-programming/</guid><description>&lt;ul&gt;
&lt;li&gt;이전 글: &lt;a href="../01-type-casting/"&gt;🏃 Modern C++ - 1. Type Casting&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;컴파일 타임에 생성되는 코드를 이용하여 프로그래밍하는 방법을 &amp;lsquo;메타 프로그래밍&amp;rsquo;이라 하는데, 템플릿이 컴파일 타임에 코드가 만들어지는 점을 이용하여 프로그래밍 하는 방법을 &amp;lsquo;템플릿 메타 프로그래밍(TMP)&amp;lsquo;라 부른다.&lt;/p&gt;
&lt;p&gt;런타임에 계산될 작업을 컴파일 타임에 해결할 수 있어 컴파일 타임은 길어지지만 실행 속도가 매우 좋아진다. 하지만 TMP는 복잡하고 구성하기 어려우며, 디버그가 어려워진다는 단점으로 인해 현업에서 자주 사용되지는 않는다.&lt;/p&gt;
&lt;p&gt;보통 재귀적인 방법으로 구현하며, 컴파일러마다 재귀 가능 횟수가 어느정도 정해져 있어 재귀 횟수가 큰 경우에는 컴파일이 실패할 수도 있다. TMP를 편하게 구성하기 위하여 &lt;code&gt;boost::MPL&lt;/code&gt; 라이브러리를 활용할 수 있다.&lt;/p&gt;</description></item><item><title>🏃 Modern C++ - 1. Type Casting</title><link>https://cignc.dev/posts/modern-cpp/01-type-casting/</link><pubDate>Fri, 26 Jun 2026 01:53:02 +0900</pubDate><guid>https://cignc.dev/posts/modern-cpp/01-type-casting/</guid><description>&lt;ul&gt;
&lt;li&gt;이전 글: &lt;a href="../00-intro/"&gt;🏃 Modern C++ - 0. Intro&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="c-type-casting"&gt;C++ Type Casting&lt;/h2&gt;
&lt;p&gt;C-style 형 변환은 상속 포인터의 형 변환 등 일반적이지 않은 형변환도 허용하기에 사용을 권하지 않는다&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;dynamic_cast&amp;lt;T&amp;gt;(expr)&lt;/code&gt;: 상속 관계의 두 클래스에서 &amp;lsquo;유도 클래스의 포인터 및 참조형 데이터 to 기초 클래스의 포인터 및 참조형 데이터&amp;rsquo; 변환에 사용&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;묵시적으로 변환되기는 하나, 안전한 변환을 위하여 사용 추천&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;static_cast&amp;lt;T&amp;gt;(expr)&lt;/code&gt;: 상속 관계의 두 클래스에서 &amp;lsquo;기초 클래스 to 유도 클래스&amp;rsquo; 변환에 사용&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;강제 형변환이 가능하지만 변환된 객체가 가지고 있지 않은 멤버에 대해서 프로그래머가 확실히 책임져야 한다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;const_cast&amp;lt;T&amp;gt;(expr)&lt;/code&gt;: 포인터와 참조자의 &lt;code&gt;const&lt;/code&gt; / &lt;code&gt;volatile&lt;/code&gt; 성향 제거&lt;/p&gt;</description></item><item><title>🏃 Modern C++ - 0. Intro</title><link>https://cignc.dev/posts/modern-cpp/00-intro/</link><pubDate>Wed, 24 Jun 2026 02:50:26 +0900</pubDate><guid>https://cignc.dev/posts/modern-cpp/00-intro/</guid><description>&lt;p&gt;이 시리즈는 2024년 겨울에 공부하며 정리했던 모던 C++ 문서들을 홈페이지 양식에 맞게 다시 정리한 문서들이다.&lt;/p&gt;
&lt;p&gt;이 내용들을 공부한 이후로도 C++을 이용한 프로젝트를 주로 진행했지만, 대부분의 경우에서 모던 C++이 반드시 필요한 경우는 많지 않았다. 오히려 기존 프로젝트 호환성을 고려하여 모던 C++ 패턴으로 해결할 수 있는 상황들도 &lt;strong&gt;레거시 방식으로 돌아가야하는 경우&lt;/strong&gt;도 있었다.&lt;/p&gt;
&lt;p&gt;하지만 분명 모던 C++ 패턴을 권장하는 경우도 겪어보았고, 그럴 때 공부하며 정리했던 이 문서들이 많은 도움이 되었다. 특히 요즘처럼 AI 코딩 에이전트를 활용할 때는 모던 C++ 패턴을 활용한 코드들이 자주 등장하기 때문에 AI가 작성한 코드를 제대로 이해하기 위해서는 모던 C++ 패턴을 잘 알아두는 것이 더 중요할 것이다.&lt;/p&gt;</description></item></channel></rss>