728x90

분류 전체보기 60

[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

[C++] noreturn함수

C++에서 noreturn 함수는 호출 후에 절대 반환되지 않는 함수로, 예외를 던지거나 프로그램을 종료하는 등의 작업에서 주로 사용됩니다. 이 함수는 [[noreturn]] 속성을 통해 선언되며, 이를 통해 컴파일러와 개발자 모두에게 함수가 반환되지 않는다는 사실을 명확히 전달합니다. 반환되지 않는 함수라는 정보를 컴파일러가 알게 되면 코드의 최적화를 도와주며, 오류 발생 가능성을 줄이는 데 기여합니다.noreturn 함수 정의[[noreturn]] 속성은 함수의 반환 타입 바로 앞에 위치하며, 주로 다음과 같은 형태로 사용됩니다.#include #include [[noreturn]] void terminate_program() { std::cout 주요 특징컴파일러 최적화에 유리noreturn ..

C++ 2024.11.07

[C++] 범위기반 for문

범위 기반 for 루프는 C++11에서 도입된 기능으로, 컨테이너(예: std::vector, std::list, 배열 등)의 모든 요소를 순회하는 간결하고 안전한 방법을 제공합니다. 반복문을 작성할 때 코드의 가독성을 높이고 오류를 줄일 수 있습니다. 기본 문법범위 기반 for 루프의 기본 문법은 다음과 같습니다for (declaration : container) { // 반복할 코드} declaration: 각 요소를 받을 변수를 선언합니다.container: 순회할 대상(배열, 벡터 등)을 지정합니다.예제벡터 순회#include #include int main() { std::vector numbers = {1, 2, 3, 4, 5}; for (int num : numbers) { ..

C++ 2024.11.06

[C++] std 네임스페이스

std 네임스페이스는 C++ 표준 라이브러리의 기본 네임스페이스로, C++에서 제공하는 다양한 함수, 클래스, 템플릿, 알고리즘 및 기타 기능을 포함하고 있습니다. 이 네임스페이스는 C++ 프로그래밍에서 매우 중요하며, C++의 강력한 기능을 지원합니다. C++ 표준 라이브러리에 속하는 모든 요소는 std 네임스페이스를 통해 관리되어 코드의 일관성과 유지보수가 용이합니다.주요 특징기본 제공 기능:std 네임스페이스에는 입력 및 출력 관련 기능(예: std::cout, std::cin), 컨테이너(예: std::vector, std::list), 알고리즘(예: std::sort, std::find), 스마트 포인터(예: std::unique_ptr, std::shared_ptr) 등 다양한 기본 제공 기능..

C++ 2024.11.05

[C++] this-> 접두사

1. this-> 접두사란?this->는 C++에서 파생 클래스가 기본 클래스로부터 상속받은 멤버를 명시적으로 참조할 때 사용하는 접두사입니다. this는 해당 클래스의 객체 자신을 가리키는 포인터이고, this->는 해당 객체의 멤버에 접근할 때 사용됩니다. 이를 사용하면 기본 클래스의 멤버를 명확하게 참조할 수 있습니다.2. this-> 사용 이유이름 해석 명확화: 템플릿 클래스에서 기본 클래스의 멤버를 자격 없이 사용할 경우, C++의 이름 해석 방식에 따라 전역 범위의 이름이나 파생 클래스에서 정의된 이름을 참조할 수 있습니다. 이 문제를 해결하기 위해 this->를 사용하여 기본 클래스의 멤버임을 명확히 할 수 있습니다.다형성 적용: 다형성을 사용할 때, 파생 클래스에서 기본 클래스의 가상 함수..

C++ 2024.11.04

[C++] 정규 이름 조회(qualified lookup)

C++에서 정규 이름 조회(qualified lookup)는 이름이 어떤 스코프(scope)에 속하는지를 명시적으로 지정하여, 해당 이름이 참조하는 객체나 함수를 결정하는 중요한 과정입니다. 이름 앞에 특정 스코프를 지정함으로써 컴파일러가 정확히 어떤 것을 참조해야 하는지 알 수 있습니다.1. 정규 이름 조회와 비정규 이름 조회 비교정규 이름 조회 (Qualified Lookup): 특정 네임스페이스, 클래스, 또는 범위를 명시적으로 지정하여 이름을 조회하는 방식입니다. 예를 들어 std::cout, ns::value, Base::function() 등에서 ::나 . 뒤에 붙는 범위를 통해 컴파일러가 정확한 스코프를 파악합니다.비정규 이름 조회 (Unqualified Lookup): 함수나 변수의 이름만..

C++ 2024.10.29

[C++] 자격 없는 이름 (Unqualified Name)

1. 자격 없는 이름 (Unqualified Name)자격 없는 이름(unqualified name)은 특정 클래스나 네임스페이스를 명시하지 않고 사용하는 이름을 의미합니다. 자격이 없다는 것은 컴파일러가 해당 이름을 해석할 때 이름이 속한 범위를 명확히 지정하지 않았다는 뜻입니다. 이러한 이름은 현재의 스코프(범위)에서 자동으로 해석됩니다. 예를 들어, 함수나 변수를 단순히 이름만으로 호출하거나 사용하는 경우가 이에 해당합니다. 예시int value = 10;void foo() { int x = value; // 자격 없는 이름 'value' 사용}위 코드에서 value는 자격 없는 이름입니다. foo() 함수 내부에서 value가 전역 변수를 참조하지만, 이 경우 ::value처럼 전역 범위임..

C++ 2024.10.28
728x90