코딩 모닥불
  • 메뉴 닫기
  • 글작성
  • 방명록
  • 환경설정
    • 분류 전체보기
      • C++
      • 표준 라이브러리
      • 백준(BOJ)
  • 홈
  • 태그
  • 방명록
C++

[C++] 불필요한 중간 단계를 건너뛰기 위한 복사 생략( copy elision )

불필요한 생성자의 호출클래스의 객체를 생성하고 초기화하기 위해, 컴파일러는 이 클래스의 생성자를 호출합니다. 다음은 CSomething 클래스의 객체가 생성될 때, 어떤 생성자가 호출되는지를 보여줍니다.class CSomething{ int m_nValue;public: CSomething() : m_nValue(0) { cout ▼출력parameterized constructor called.copy constructor called.위의 st 객체는 값 10으로 초기화되는데, 이때 매개 변수 생성자( parameterized constructor )가 호출됩니다.그리고, 이 st 객체로부터 obj 객체를 초기화할 때, CSomething 클래스의 복사 생성자( copy cons..

2025. 3. 31.
C++

[C++] 상수 표현식에 사용될 수 있는 constexpr 함수

constexpr 함수다음은 특별한 사용자 공식에 의하여 원소 개수를 구하고, 이를 사용하여 배열을 정의하는 예문입니다.#include int main(){ constexpr int row{ 3 }; constexpr int col{ 4 }; constexpr int size{ ( row + 3 ) * ( col + 2 ) }; // 상수 표현식 std::array two_dim_arr{};}그런데, 이 배열을 정의하기 위해선, 원소의 개수를 나타내는 size가 상수 표현식( const expression ) 즉, 컴파일 시에 값을 평가할 수 있는 표현식이어야 합니다. 그래서, 예문에서는 이 size를 constexpr 변수로 정의하였습니다. [C++] 컴파일 시에 값..

2025. 2. 13.
C++

[C++] 템플릿 함수( template function )의 정의 중복

일반 함수의 정의 중복이전 글에서 말한 것과 같이, 여러 파일에서 다음과 같이, 동일한 함수를 정의하게 되면, 프로그램 내에는 하나의 정의만 존재해야 된다는 ODR( one definition rule )을 어기게 됩니다. [C++] 클래스 같은 타입( type )의 정의 중복타입( type )의 정의 중복이전 글에선, 헤더 가드( header guard )를 설명하면서, 함수의 정의가 있는 헤더 파일을 다른 두 cpp 파일에서 포함하는 경우, 정의의 중복 문제가 발생한다는 것을 얘기했습codingbonfire.tistory.com// module.cpp ----------------------------------------int add( int a, int b){ // 함수 정의 return a..

2025. 1. 15.
C++

[C++] 클래스의 모든 객체에 공유되는 정적( static ) 멤버 변수

정적 멤버 변수( static member variable )static는 이 키워드가 사용되는 문맥에 따라, 다양한 해석이 필요한 키워드( keyword )입니다. 만약, 이 키워드가 전역 변수( global variable )와 함께 사용되면, 이 전역 변수가 정의된 파일 내에서만 공유되는( 내부 링크를 가지므로 ) 전역 변수를 의미하게 되며, 함수 안의 지역 변수( local variable )와 함께 사용되면, 그 함수 호출 시에만 공유되는 전역 변수를 정의하게 됩니다. [C++] 전역 변수( global variable )의 종류와 링크( linkage )의 개념전역 변수의 종류C++에서 지역 변수( local variable )는 함수 내부에 정의된 변수를 말합니다.이에 대응하는, 함수 외부에..

2025. 1. 8.
C++

[C++] inline 함수에 대한 이해

함수 호출과 inline 확장( expansion )아래의 예문은 main 함수에서 간단한 함수를 호출하는 코드를 보여줍니다.#include int add( int a, int b){ return a + b;}int main(){ int val = add( 3, 5); // 함수 호출 std::cout 그런데, 이 함수 호출에는 함수의 내용을 실행하는 것 외에 들어가는 추가비용이 있습니다.이러한 비용에는, 함수의 인수 3과 5를 함수에 전달하는 과정에 들어가는 복사 비용, 함수의 결과를 main 함수에 다시 되돌려주는데 필요한 전달 비용, 그리고 함수 호출에 필요한 스택( stack ) 처리의 비용 등이 포함됩니다.즉, 함수의 호출은 공짜가 아니라는 얘기죠. 그렇지만, 일반적으로 이 비용..

2025. 1. 4.
C++

[C++] inline 함수와 static 함수의 비교

inline 함수 vs static 함수특이하게도 inline 함수와 static 함수는, 이 함수들을 포함하는 모든 파일에 정의될 수 있다는 공통점이 있습니다. 위의 문장을 좀 더 쉽게 이해할 수 있도록, 다음글을 먼저 읽어보는 것을 추천합니다. [C++] inline 함수에 대한 이해함수 호출과 inline 확장( expansion )아래의 예문은 main 함수에서 간단한 함수를 호출하는 코드를 보여줍니다.#include int add( int a, int b){ return a + b;}int main(){ int val = add( 3, 5); // 함수 호출 std::cout 그런codingbonfire.tistory.com 원래, 일반 함수가 서로 다른 두 파일에 정의되면, 프로그램 내에서 식..

2025. 1. 4.
C++

[C++] 클래스 같은 타입( type )의 정의 중복

타입( type )의 정의 중복이전 글에선, 헤더 가드( header guard )를 설명하면서, 함수의 정의가 있는 헤더 파일을 다른 두 cpp 파일에서 포함하는 경우, 정의의 중복 문제가 발생한다는 것을 얘기했습니다. [C++] 정의( definition )의 중복을 막는 헤더 가드( header guard )정의( definition )의 중복이 발생하는 이유C++에서는 변수나 함수, 클래스 같은 타입의 정의가 중복되는 것을 허용하지 않습니다. 아래의 예문은 이러한 정의가 중복되는 예를 보여줍니다.#include incodingbonfire.tistory.com 기억을 환기시켜 봅시다.// module1.h ----------------------#ifndef HEADER_GUARD_H#define..

2024. 12. 26.
  • «
  • 1
  • »

전체 카테고리

  • 분류 전체보기
    • C++
    • 표준 라이브러리
    • 백준(BOJ)

블로그 인기글

태그

  • #전방 선언
  • #Enum
  • #std::vector
  • #std::unique_ptr
  • #static_cast
  • #이진 탐색
  • #함수 객체
  • #inline
  • #std::queue
  • #const
  • #범위 기반 for
  • #동적 계획법
  • #포인터
  • #Lamda
  • #깊이 우선 탐색
  • #복사 생성자
  • #전처리기
  • #auto
  • #std::string_view
  • #namespace
  • #상수 표현식
  • #예외 처리
  • #std::stack
  • #decltype
  • #constexpr
  • #헤더 가드
  • #std::sort
  • #초기화
  • #소멸자
  • #using
MORE
애드센스 광고 영역
Powered by Privatenote Copyright © 코딩 모닥불 All rights reserved. TistoryWhaleSkin3.4

티스토리툴바