<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>C++ on Kelly Dev</title><link>https://kelly-chui.github.io/tags/c++/</link><description>Recent content in C++ on Kelly Dev</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Tue, 28 Jul 2026 21:09:14 +0900</lastBuildDate><atom:link href="https://kelly-chui.github.io/tags/c++/index.xml" rel="self" type="application/rss+xml"/><item><title>TIL. Jul 28, 2026</title><link>https://kelly-chui.github.io/til/2026/til-2026-07-28/</link><pubDate>Tue, 28 Jul 2026 21:09:14 +0900</pubDate><guid>https://kelly-chui.github.io/til/2026/til-2026-07-28/</guid><description>&lt;h2 id="오늘-한-내용"&gt;오늘 한 내용&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://kelly-chui.github.io/ps/2026/ps-codeforces-230b-t-primes/"&gt;Codeforces 230B. T-Primes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kelly-chui.github.io/ps/2026/ps-leetcode-3517-smallest-palindromic-rearrangement-i/"&gt;Leetcode 3517. Smallest Palindromic Rearrangement I&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="배운-내용"&gt;배운 내용&lt;/h2&gt;
&lt;h3 id="c-배열-vs-벡터"&gt;C++ 배열 vs 벡터&lt;/h3&gt;
&lt;p&gt;Codeforces에서는 C++로만 코드를 작성하는데, 최근에는 벡터보다 C 스타일 배열을 선호했다. 그런데 오늘 T-Primes 문제를 풀면서 다시 벡터를 쓸까 고민했다.&lt;/p&gt;
&lt;p&gt;가장 큰 이유는 보일러플레이트 때문이다. &lt;code&gt;push_back&lt;/code&gt; 같은 벡터에서 편리한, 다른 언어에서는 당연히 있는 메소드가 배열에 없다. 결국 추가 코드를 작성하고 어느정도의 비효율이 생긴다. 그 외에도 배열은 함수에 넘길 때 크기를 같이 넘겨줘야 하는 번거로움이 있다. 글로벌 변수를 선호하지 않아서 레퍼런스를 파라미터로 와르르 넘기는 스타일을 쓰는데, 배열이면 크기도 같이 들고 다녀야 한다.&lt;/p&gt;</description></item><item><title>TIL. Jul 27, 2026</title><link>https://kelly-chui.github.io/til/2026/til-2026-07-27/</link><pubDate>Mon, 27 Jul 2026 21:32:08 +0900</pubDate><guid>https://kelly-chui.github.io/til/2026/til-2026-07-27/</guid><description>&lt;h2 id="오늘-한-내용"&gt;오늘 한 내용&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://kelly-chui.github.io/ps/2026/ps-codeforces-4c-registration-system/"&gt;Codeforces 4C. Registration System&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kelly-chui.github.io/ps/2026/ps-codeforces-25a-iq-test/"&gt;Codeforces 25A. IQ Test&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;각각 Hash Table과 구현 능력을 요구하는 PS 문제였다. IQ Test 부분이 구현이 살짝 번거로운 부분이 있었다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://kelly-chui.github.io/posts/wwdc-swiftui-essentials/"&gt;SwiftUI. SwiftUI Essentials&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;WWDC 24에서 나온 SwiftUI Essentials 세션을 봤다. 24분 영상인데 정보 밀도가 엄청 높고 예제에서 보여준 것들도 많아서, 직접 예제를 돌리고 캡처하고, 동영상 녹화하고 하는데 꽤 시간이 들었다.&lt;/p&gt;
&lt;p&gt;덕분에 블로그에 이미지 수평 배열, 이미지 캡션과 같은 숏 코드들도 추가했다.&lt;/p&gt;
&lt;h2 id="배운-내용"&gt;배운 내용&lt;/h2&gt;
&lt;h3 id="swiftui-essentials"&gt;SwiftUI Essentials&lt;/h3&gt;
&lt;p&gt;WWDC 세션을 하나 봤다. 이번에는 SwiftUI의 기본 구조를 다시 정리하는 내용이었는데, 핵심은 &lt;code&gt;View&lt;/code&gt;가 실제 UI 객체를 직접 만지는 대상이 아니라 선언형으로 UI를 설명하는 값이라는 점 이었다(Demystify SwiftUI도 마찬가지고 엄청나게 반복되는 내용이다.)&lt;/p&gt;</description></item><item><title>TIL. Jun 9, 2026</title><link>https://kelly-chui.github.io/til/2026/til-2026-06-09/</link><pubDate>Tue, 09 Jun 2026 20:48:13 +0900</pubDate><guid>https://kelly-chui.github.io/til/2026/til-2026-06-09/</guid><description>&lt;h2 id="오늘-한-내용"&gt;오늘 한 내용&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;LeetCode 3689, 2574 풀이&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dev-data-server-light&lt;/code&gt;의 &lt;code&gt;AGENTS.md&lt;/code&gt; 구조 정리&lt;/li&gt;
&lt;li&gt;루트와 모듈별 개발 규칙의 중복 검토&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="배운-내용"&gt;배운 내용&lt;/h2&gt;
&lt;p&gt;새 디렉토리 구조에서는 공통 원칙을 루트 &lt;code&gt;AGENTS.md&lt;/code&gt;에 모으고, 모듈에만 해당하는 규칙은 해당 모듈의 문서에 두는 방향이 적절하다.&lt;/p&gt;
&lt;p&gt;루트에는 TypeScript, Express, Vitest 같은 기술과 전체 아키텍처, 테스트 원칙을 둔다. 반면 DB 모듈의 레코드 모델이나 저장소 구현 규칙처럼 다른 모듈이 알 필요 없는 내용은 DB 문서에 남긴다.&lt;/p&gt;
&lt;p&gt;중복된 규칙은 단순히 길이의 문제가 아니다. 같은 내용이 여러 파일에 있으면 나중에 한쪽만 수정될 수 있고, AI가 서로 다른 지침으로 해석할 가능성도 생긴다.&lt;/p&gt;</description></item><item><title>Call by reference와 Call by pointer의 차이</title><link>https://kelly-chui.github.io/posts/cs-programming-language-call-by-reference-call-by-pointer/</link><pubDate>Sat, 07 Jun 2025 00:00:00 +0000</pubDate><guid>https://kelly-chui.github.io/posts/cs-programming-language-call-by-reference-call-by-pointer/</guid><description>&lt;p&gt;Call by reference와 call by pointer는 모두 호출자가 가진 객체를 함수 안에서 변경할 수 있어 비슷해 보인다. 하지만 C++ 언어에서 파라미터가 가지는 의미와 사용할 수 있는 연산은 다르다.&lt;/p&gt;
&lt;h2 id="pointer를-값으로-전달하기"&gt;Pointer를 값으로 전달하기&lt;/h2&gt;
&lt;p&gt;포인터 파라미터는 주소를 저장한 포인터 객체를 값으로 전달받는다. 함수는 복사된 포인터를 역참조해 호출자의 객체를 변경할 수 있다.&lt;/p&gt;
&lt;div class="code-theme-github"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;updateByPointer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="k"&gt;nullptr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;updateByPointer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;포인터 자체는 복사본이므로 함수 안에서 다른 주소를 대입해도 호출자가 가진 포인터 변수는 바뀌지 않는다.&lt;/p&gt;</description></item></channel></rss>