728x90

C++ 40

[C++] decltype(타입 결정자)

C++11에서 도입된 **decltype**은 주어진 표현식의 타입을 결정하는 데 사용되는 키워드입니다. 이 기능은 특히 템플릿 프로그래밍이나 복잡한 타입 조작에서 매우 유용하며, 컴파일러가 타입을 자동으로 추론할 수 있게 해줍니다. 기본 문법decltype(expression) variable_name; expression: 타입을 추론할 수 있는 표현식.variable_name: 추론된 타입을 가진 변수의 이름.사용 예제1. 기본 사용법#include int main() { int a = 5; decltype(a) b = 10; // 'a'의 타입(int)을 사용하여 'b' 선언 std::cout   2. 표현식의 타입 결정#include int add(int x, int y) { ..

C++ 2024.11.20

[C++] 함수 템플릿(function template)

C++에서 **함수 템플릿(Function Template)**은 여러 데이터 타입에 대해 동일한 함수를 정의할 수 있는 강력한 기능입니다. 이를 통해 코드의 재사용성을 높이고, 다양한 타입에 대해 일관된 로직을 적용할 수 있습니다. 기본 개념함수 템플릿은 함수의 매개변수 타입을 일반화하여, 호출 시 전달되는 인자의 타입에 따라 적합한 함수 버전을 자동으로 생성합니다. 이를 위해 template 키워드와 타입 매개변수를 사용합니다.  기본 문법template T functionName(T arg) { // 함수 본체} T: 템플릿 매개변수(Type Parameter). 호출 시 실제 타입으로 대체됩니다.typename: 템플릿에서 타입 매개변수를 선언할 때 사용하는 키워드로, class와 동일하게 ..

C++ 2024.11.19

[C++] merge 함수

C++에서 std::merge 함수는 두 개의 정렬된 데이터를 하나로 병합하여 새로운 정렬된 범위를 생성하는 데 사용됩니다. 이는 정렬된 배열이나 컨테이너를 결합하거나 병합 정렬 알고리즘에서 핵심적으로 활용됩니다. 1. std::merge 함수란?동작 원리std::merge는 두 개의 정렬된 범위를 입력으로 받아 하나의 정렬된 범위로 병합합니다. 이때, 입력 범위가 반드시 오름차순 또는 내림차순으로 정렬되어 있어야 하며, 결과는 새로운 컨테이너나 범위에 저장됩니다.사용 프로토타입#include templateOutputIterator merge(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, In..

C++ 2024.11.18

[C++] 템플릿 매개변수(template parameter)

C++에서 템플릿 매개변수는 함수나 클래스 템플릿 정의에서 사용하는 매개변수입니다. 이를 통해 데이터 타입이나 값 등을 일반화하여 다양한 타입에 대해 재사용 가능한 코드를 작성할 수 있습니다.기본 개념함수 템플릿:함수 템플릿을 사용하면 여러 데이터 타입에 대해 동일한 함수를 정의할 수 있습니다. 아래 예제에서는 두 값을 비교하는 함수를 정의합니다.#include template T max(T a, T b) { return (a > b) ? a : b;}int main() { std::cout  클래스 템플릿:클래스 템플릿을 사용하면 데이터 타입을 일반화하여 다양한 타입의 객체를 생성할 수 있습니다.#include #include template class Box {private: T it..

C++ 2024.11.14

[C++] 숨겨진 친구(hidden friend)

"Hidden friend" 함수는 C++에서 친구(friend) 함수가 이름의 가시성 문제로 인해 호출되지 않는 현상을 설명하는 개념입니다. 이는 C++의 이름 가시성(scope) 규칙에서 비롯된 문제이며, 특정 규칙이나 표준이 아닌, 프로그래밍 중에 발생할 수 있는 문제 유형 중 하나입니다.Hidden Friend의 개념친구 함수:클래스 내부에서 friend 키워드를 사용해 선언된 함수로, 해당 클래스의 private 및 protected 멤버에 접근할 수 있습니다.이름 가시성의 문제:친구 함수와 동일한 이름을 가진 다른 함수가 다른 범위(예: 다른 클래스나 네임스페이스 등)에서 정의되면, 호출 시 이 함수가 우선시 될 수 있습니다. 이로 인해 원래 의도했던 친구 함수가 호출되지 않거나 접근할 수 없..

C++ 2024.11.13

[C++] 친구(friends) 함수

C++에서 친구(friend) 함수는 특정 클래스의 private 또는 protected 멤버에 접근할 수 있는 특별한 외부 함수입니다. 친구 함수는 클래스의 멤버 함수는 아니지만, 클래스 내부의 friend 선언을 통해 클래스의 비공개 멤버에 접근할 권한을 얻습니다.기본 개념친구 함수 선언:클래스 내부에서 friend 키워드를 사용해 친구 함수를 선언합니다. 이렇게 선언된 함수는 클래스의 비공개 멤버에 접근할 수 있습니다.친구 함수 정의:친구 함수는 클래스 외부에서 정의되며, 해당 클래스의 멤버 함수가 아닙니다. 단순히 함수처럼 호출됩니다.예제다음 예제에서는 친구 함수가 클래스의 비공개 멤버에 접근하는 방법을 보여줍니다.#include class MyClass {private: int value;..

C++ 2024.11.12

[C++] noexcept

noexcept는 C++에서 함수가 예외를 발생시키지 않을 것임을 명시하는 데 사용되는 지정자입니다. C++11에서 도입되었으며, 이를 통해 컴파일러는 최적화를 수행할 수 있고, 코드의 안정성을 높일 수 있습니다. noexcept는 특히 안전한 함수 호출과 효율적인 코드 작성에 도움을 줍니다.기본 사용법noexcept는 함수 선언 시 사용하여 해당 함수가 예외를 던지지 않음을 컴파일러에게 알려줍니다. 다음과 같은 형식으로 선언할 수 있습니다.void myFunction() noexcept { // 예외를 발생시키지 않는 코드}noexcept 사용 예제-기본 예제#include void safeFunction() noexcept { std::cout  safeFunction은 noexcept로 ..

C++ 2024.11.11

[C++] 람다 함수의 클로저 타입

람다 함수의 클로저 타입은 람다 함수가 외부 변수를 캡처할 때 생성되는 고유한 타입입니다. 이 타입은 람다 함수 내부에서 사용할 수 있는 변수를 포함하며, 함수 호출 시 캡처된 변수를 사용할 수 있게 합니다.클로저 타입의 특징익명 타입:람다 함수는 고유한 익명 타입을 가지며, 이 타입은 함수가 정의될 때 컴파일러에 의해 생성됩니다. 따라서 클로저 타입은 이름이 없으며 auto 키워드를 사용해 변수에 할당할 수 있습니다.캡처된 변수:람다는 [ ] 안에 명시된 대로 외부 변수(값 또는 참조)를 캡처합니다. 이렇게 캡처된 변수는 람다 함수가 외부 상태를 유지하거나 접근할 수 있도록 해 줍니다.상태 유지:람다 함수는 캡처한 변수를 통해 상태를 유지하며, 캡처된 값은 람다 함수가 여러 번 호출될 때 동일하게 유지..

C++ 2024.11.10

[C++] 람다(lambda) 함수

C++에서 람다(Lambda) 함수는 익명 함수(Anonymous Function) 또는 즉석 함수(Inline Function)를 정의할 수 있는 기능입니다. C++11에서 도입되었으며, 코드를 간결하게 작성하고, 간단한 함수가 필요한 경우 즉석에서 정의할 수 있습니다. 람다는 특히 STL 알고리즘 함수와 함께 사용할 때 유용합니다.기본 구문람다의 기본 구조는 다음과 같습니다.[capture](parameters) -> return_type { // 함수 본체}capture: 외부 변수를 캡처하는 방법을 정의하며, [&] (모든 변수 참조 캡처), [=] (모든 변수 복사 캡처), [x] (특정 변수 복사 캡처)와 같은 방식이 있습니다.parameters: 함수의 매개변수를 정의합니다.return..

C++ 2024.11.09

[C++] maybe_unused

[[maybe_unused]]는 C++17에서 도입된 속성(attribute)으로, 특정 식별자(변수, 함수, 타입 등)가 코드 내에서 사용되지 않을 가능성을 명시합니다. 이 속성을 통해 컴파일러에게 해당 식별자가 사용되지 않더라도 경고를 발생시키지 않도록 하여 코드의 가독성을 높이고, 불필요한 경고로부터 코드를 정리할 수 있습니다. 주로 임시적이거나 조건부 사용을 위해 변수를 유지할 필요가 있을 때 유용합니다.사용법[[maybe_unused]] 속성은 다양한 식별자에 적용할 수 있으며, 다음과 같은 상황에서 활용할 수 있습니다. 변수에 적용디버그 중 사용하거나 특정 조건에서만 필요한 변수가 경고 없이 존재하도록 할 수 있습니다.#include [[maybe_unused]] int unusedVariab..

C++ 2024.11.08
728x90