C++ 32

STL 사용의 장점

추상화와 일관성STL은 다양한 컨테이너(vector, list, set 등)와 알고리즘(sort, find, for_each 등)을 표준화된 인터페이스로 제공하여, 특정 컨테이너의 내부 구현 세부 사항에 의존하지 않고 일관되게 코드를 작성할 수 있습니다.반복자(iterator) 사용의 장점반복자는 컨테이너의 내부 구조를 감추고 공통된 방식으로 접근할 수 있게 해줍니다. 이를 통해 컨테이너 종류에 상관없이 동일한 방식으로 원소를 순회할 수 있으며, 반복자 덕분에 알고리즘이 컨테이너와 독립적으로 작동할 수 있습니다.C++11부터는 범위 기반 for문을 사용할 수 있어, 반복자 사용을 더욱 간편하게 만들고 코드 가독성을 크게 향상시킵니다.알고리즘과의 결합STL 알고리즘은 반복자와 결합되어 작성되므로, 반복문 ..

C++ 2025.03.09

const 변수에 대한 최적화

1. 불변성 기반 최적화const 변수는 선언 이후 값이 변경되지 않는다는 점을 컴파일러가 확실히 알고 있습니다. 이 정보를 바탕으로 컴파일러는 다음과 같은 최적화를 수행할 수 있습니다.1-1. 값의 인라인화const 변수는 값이 불변이므로, 컴파일러는 변수 대신 그 값을 코드에 직접 인라인할 수 있습니다. 이를 통해 변수를 참조하는 과정이 제거되어 런타임 성능이 향상됩니다.예시 코드:const int VALUE = 10;void printValue() { std::cout const int VALUE = 10; void printValue() { std::cout 컴파일 결과 (최적화 적용):mov eax, 10 ; VALUE의 값이 바로 사용됨call _ZNSolsEi ; std::cout에..

C++ 2024.12.17

const 변수와 일반 변수

1. const 메모리const는 특정 변수를 변경할 수 없도록 선언할 때 사용됩니다. 이를 통해 메모리 영역에 저장된 값은 변할 수 없으며, 코드의 안전성을 높이고 프로그램 오류를 줄일 수 있습니다.특징:컴파일 타임에 값이 고정될 수 있다const 변수는 컴파일러가 해석하여 상수처럼 취급될 수 있습니다. 최적화 단계에서 const 값은 코드에 직접 인라인될 수 있습니다.읽기 전용메모리 위치에 접근할 수 있지만 값을 변경할 수 없습니다. 변경 시 컴파일 오류가 발생합니다.런타임에 값이 결정될 수 있음반드시 모든 const 변수가 컴파일 타임 상수는 아닙니다. 런타임에 초기화된 const 변수도 존재할 수 있습니다.예시:const int x = 10; // 컴파일 타임 상수int y = 20;const i..

C++ 2024.12.17

std::bitset<'비트크기'>

std::bitset은 C++ 표준 라이브러리에서 제공하는 템플릿 클래스인 std::bitset을 이용하여, 고정된 크기의 256개의 비트를 효율적으로 다룰 수 있게 해주는 자료형입니다. std::bitset은 비트 연산을 수행할 때 유용하며, 다음과 같은 특징과 사용법을 가지고 있습니다.주요 특징고정된 크기: std::bitset은 256개의 비트를 저장할 수 있습니다. 크기는 컴파일 타임에 고정되므로, 런타임에 크기를 변경할 수 없습니다.비트 연산 지원: 논리적 비트 연산(AND, OR, XOR), 비트 시프트 연산, 비트 반전 등의 다양한 비트 연산을 지원합니다.비트 접근 및 조작: 특정 비트의 값을 설정, 해제, 토글할 수 있으며, 비트의 개별 값을 쉽게 접근할 수 있습니다.입출력 지원: 비트를 ..

C++ 2024.08.06

템플릿의 정의를 CPP에 쓸 수 없는 이유

일반 함수일반 함수의 경우, 함수 선언과 정의를 분리하는 것이 일반적입니다. 함수 선언은 헤더 파일에 있고, 정의는 소스 파일에 있습니다. 예를 들어:// myfunctions.hvoid myFunction();// myfunctions.cpp#include "myfunctions.h"void myFunction() { // 함수 정의} 컴파일러는 각 소스 파일을 독립적으로 컴파일한 후, 링커가 모든 객체 파일을 결합하여 프로그램을 만듭니다. 이 과정에서 링커는 함수 선언과 정의를 연결합니다. 링커는 함수의 선언이 포함된 객체 파일에서 함수 호출을 발견하고, 함수 정의가 포함된 다른 객체 파일에서 이를 찾아 연결합니다.템플릿 함수템플릿 함수의 경우, 상황이 달라집니다. 템플릿은 사용될 때마다 컴파일..

C++ 2024.07.25

__declspec(dllexport)

__declspec(dllimport)는 extern 선언과 비슷하게 사용되는 MS정의 키워드 입니다. 이 키워드는 DLL에 정의된 함수를 선언하는 기능에서는 extern과 같습니다. 다만 동적인 경우와 정적인 경우 모두에 사용됩니다. 여기서 동적이라는 것은 DLL을 '명시적 로드'하는 경우를 포함합니다.그러나 extern은 동적으로 명시적 로드하는 경우과 전혀 관련이 없고 런타임(동적)이 아니라 링크 타임에 선언에 대한 실제 정의를 찾아 링크하는 경우에 사용합니다. 따라서 동적이 아니라 '정적'인 경우에만 사용됩니다.DLL라이브러리를 로드하는 방식은 묵시적인 방법과 명시적인 방법이 있는데 묵시적인 방법의 사용예는 '정적'인 경우에 해당하며 사실상 extern을 사용하는 것과 같다 하겠습니다. 문제가 없..

C++ 2024.06.20

extern "C"

출처: https://noel-embedded.tistory.com/1078 extern "C" 의미extern "C" 의미는 안에 정의된 함수 혹은 헤더파일에 관해서는 맹글링하지 말라는 의미다. 맹글링은 C++에서 사용되는 용어로, C++ 컴파일러 단계에서 함수 혹은 변수이름을 기존과 크게 다르게 바noel-embedded.tistory.com extern "C" 의미는 안에 정의된 함수 혹은 헤더파일에 관해서는 맹글링하지 말라는 의미다.  맹글링은 C++에서 사용되는 용어로, C++ 컴파일러 단계에서 함수 혹은 변수이름을 기존과 크게 다르게 바꾸는 행위를 말한다. C++은 C와 다르게 클래스 속성을 이용해서 매개변수를 달리해서 함수 이름을 동일하게 사용할 수 있게 된다. 즉 다형성을 지원하기에 가능한..

C++ 2024.06.20

이동 연산(std::move, std::forward)

이동 연산은 커스텀 자료형, 즉 유저가 정의한 클래스나 구조체에서 사용하기 위한 기능이다. 기본 자료형에는 이동연산이 정의되어 있지 않다.  기본 자료형(예: int, float, double, 포인터 등)에 대해서는 이동 연산이 필요하지 않습니다. 이유는 다음과 같습니다:단순성: 기본 자료형은 매우 단순한 구조를 가지고 있으며, 값 자체를 복사하는 데 드는 비용이 매우 적습니다. 이동 연산의 이점은 복사가 비싼 객체(예: 대규모 배열, 동적 할당된 메모리 등)에서만 유의미합니다.메모리 관리: 기본 자료형은 복사 시에 새로운 메모리를 할당하거나 할당된 메모리를 관리하는 복잡한 과정이 필요하지 않습니다. 예를 들어, int형 변수의 경우 복사하면 그저 값만 복사하면 됩니다.표준 라이브러리: C++ 표준 라..

C++ 2024.05.17