CS
-
C++에서는 네 가지 유형의 캐스트 연산자가 있으며, 각각은 서로 다른 목적과 사용 사례에 대해 설계되어 있다. 이들 캐스트 연산자는 타입 변환을 수행하며, 특정 캐스트 연산자는 추가적인 런타임 검사를 제공한다. static_cast: static_cast는 컴파일 타임에 타입 변환을 수행한다. 관련된 타입 간의 변환에 사용된다(예: 기본 타입 간의 변환, 상속된 클래스 간의 포인터 변환). float f = 10.5; int i = static_cast(f); // float에서 int로 변환 reinterpret_cast: reinterpret_cast는 바이트 레벨에서 타입 변환을 수행한다. 서로 관련이 없는 타입 간의 변환에 사용된다. 이것은 위험할 수 있으며, 제대로 사용되지 않으면 정의되지 않..
C++ 의 캐스팅C++에서는 네 가지 유형의 캐스트 연산자가 있으며, 각각은 서로 다른 목적과 사용 사례에 대해 설계되어 있다. 이들 캐스트 연산자는 타입 변환을 수행하며, 특정 캐스트 연산자는 추가적인 런타임 검사를 제공한다. static_cast: static_cast는 컴파일 타임에 타입 변환을 수행한다. 관련된 타입 간의 변환에 사용된다(예: 기본 타입 간의 변환, 상속된 클래스 간의 포인터 변환). float f = 10.5; int i = static_cast(f); // float에서 int로 변환 reinterpret_cast: reinterpret_cast는 바이트 레벨에서 타입 변환을 수행한다. 서로 관련이 없는 타입 간의 변환에 사용된다. 이것은 위험할 수 있으며, 제대로 사용되지 않으면 정의되지 않..
2023.11.01 -
inline 함수와 #define 매크로 함수는 코드에서 유사한 작업을 수행할 수 있지만, 구문, 기능 및 처리 방식에 많은 차이가 있다. 다음은 inline 함수와 #define 매크로의 주요 차이점이다: 정의 방식: inline 함수는 일반 함수와 같이 정의되며, 인자와 반환 타입을 가진다. #define 매크로는 전처리기 지시자를 사용하여 정의되며, 인자와 반환 타입이 명시적으로 정의되지 않는다. // inline 함수 예제 inline int add(int a, int b) { return a + b; } // #define 매크로 예제 #define ADD(a, b) ((a) + (b)) 타입 검사: inline 함수는 컴파일 타임에 정적 타입 검사를 제공한다. #define 매크로는 타입 검사..
inline 함수와 매크로 함수의 차이inline 함수와 #define 매크로 함수는 코드에서 유사한 작업을 수행할 수 있지만, 구문, 기능 및 처리 방식에 많은 차이가 있다. 다음은 inline 함수와 #define 매크로의 주요 차이점이다: 정의 방식: inline 함수는 일반 함수와 같이 정의되며, 인자와 반환 타입을 가진다. #define 매크로는 전처리기 지시자를 사용하여 정의되며, 인자와 반환 타입이 명시적으로 정의되지 않는다. // inline 함수 예제 inline int add(int a, int b) { return a + b; } // #define 매크로 예제 #define ADD(a, b) ((a) + (b)) 타입 검사: inline 함수는 컴파일 타임에 정적 타입 검사를 제공한다. #define 매크로는 타입 검사..
2023.11.01 -
std::string은 일반적으로 동적 할당 배열(dynamic allocation array)를 사용하여 문자열 데이터를 저장한다. std::string의 구현은 C++ 표준 라이브러리에 따라 다를 수 있지만, 대부분의 구현에서 std::string은 내부적으로 동적 할당 메모리를 사용하여 문자열 데이터를 저장하고 관리한다. 이렇게 동적 메모리를 사용하면 문자열의 크기가 런타임에 변경될 수 있게 해준다. std::string의 일반적인 구현은 다음과 같은 멤버 변수를 포함할 수 있다: Data Pointer: 동적 할당된 메모리의 시작 주소를 저장하는 포인터다. 이 포인터는 문자열 데이터를 저장하는 배열을 가리킨다. Size: 현재 문자열의 길이를 저장한다. Capacity: 동적 할당된 메모리의 전체..
std::string 은 동적 할당 배열이다!std::string은 일반적으로 동적 할당 배열(dynamic allocation array)를 사용하여 문자열 데이터를 저장한다. std::string의 구현은 C++ 표준 라이브러리에 따라 다를 수 있지만, 대부분의 구현에서 std::string은 내부적으로 동적 할당 메모리를 사용하여 문자열 데이터를 저장하고 관리한다. 이렇게 동적 메모리를 사용하면 문자열의 크기가 런타임에 변경될 수 있게 해준다. std::string의 일반적인 구현은 다음과 같은 멤버 변수를 포함할 수 있다: Data Pointer: 동적 할당된 메모리의 시작 주소를 저장하는 포인터다. 이 포인터는 문자열 데이터를 저장하는 배열을 가리킨다. Size: 현재 문자열의 길이를 저장한다. Capacity: 동적 할당된 메모리의 전체..
2023.11.01 -
explicit explicit 키워드는 주로 생성자와 변환 연산자에 사용되며, 해당 생성자나 변환 연산자가 암시적 변환(implicit conversion)을 허용하지 않도록 지정한다. 예를 들어, explicit 키워드가 없는 생성자를 가진 클래스가 있을 때: class Test { public: Test(int x) {} }; void func(Test t) {} int main() { func(42); // int에서 Test로 암시적 변환 가능 } 위의 코드는 func(42)에서 int 타입의 42가 Test 타입으로 암시적 변환되어 func 함수에 전달된다. explicit 키워드가 생성자에 지정된 경우: class Test { public: explicit Test(int x) {} }; v..
explicit 키워드explicit explicit 키워드는 주로 생성자와 변환 연산자에 사용되며, 해당 생성자나 변환 연산자가 암시적 변환(implicit conversion)을 허용하지 않도록 지정한다. 예를 들어, explicit 키워드가 없는 생성자를 가진 클래스가 있을 때: class Test { public: Test(int x) {} }; void func(Test t) {} int main() { func(42); // int에서 Test로 암시적 변환 가능 } 위의 코드는 func(42)에서 int 타입의 42가 Test 타입으로 암시적 변환되어 func 함수에 전달된다. explicit 키워드가 생성자에 지정된 경우: class Test { public: explicit Test(int x) {} }; v..
2023.11.01 -
중괄호 초기화 (Brace Initialization): C++11부터 소개된 중괄호 초기화는 객체의 초기화 방법을 통일하고자 도입되었다. 이 방식의 장점: 일관된 문법: 동일한 중괄호 {} 문법을 사용하여 변수, 객체, 배열, STL 컨테이너 등을 초기화할 수 있다. narrowing conversion 방지: {}를 사용하여 초기화할 때 형 변환이 수행되지 않거나 값의 손실이 발생하지 않도록 한다. int i{3.14}; // 컴파일 오류. narrowing conversion 방지 기본 생성자와 동일한 문법: 중괄호를 사용하여 기본 생성자를 호출하는 것도 가능하다. std::vector vec{}; // 비어 있는 벡터 생성 다양한 초기화 방법들 C++에서는 여러 가지 방법으로 변수나 객체를 초기화..
중괄호 초기화와 다양한 초기화 방법중괄호 초기화 (Brace Initialization): C++11부터 소개된 중괄호 초기화는 객체의 초기화 방법을 통일하고자 도입되었다. 이 방식의 장점: 일관된 문법: 동일한 중괄호 {} 문법을 사용하여 변수, 객체, 배열, STL 컨테이너 등을 초기화할 수 있다. narrowing conversion 방지: {}를 사용하여 초기화할 때 형 변환이 수행되지 않거나 값의 손실이 발생하지 않도록 한다. int i{3.14}; // 컴파일 오류. narrowing conversion 방지 기본 생성자와 동일한 문법: 중괄호를 사용하여 기본 생성자를 호출하는 것도 가능하다. std::vector vec{}; // 비어 있는 벡터 생성 다양한 초기화 방법들 C++에서는 여러 가지 방법으로 변수나 객체를 초기화..
2023.11.01 -
log(n)의 시간 복잡도.(단계별로 n개에서 반씩 줄여가면서 하니까) int BinarySearch(int* arr, int n, int x) // 이진 탐색 { int left = 0; int right = n - 1; while (left
이진 탐색 (Binary Search)log(n)의 시간 복잡도.(단계별로 n개에서 반씩 줄여가면서 하니까) int BinarySearch(int* arr, int n, int x) // 이진 탐색 { int left = 0; int right = n - 1; while (left
2023.10.31