이름공간
변수
행위

기초 정의

cppreference.com
< cpp‎ | language
 
 
C++ language
General topics
Flow control
Conditional execution statements
Iteration statements
Jump statements
Functions
function declaration
lambda function declaration
function template
inline specifier
exception specifications (deprecated)
noexcept specifier (C++11)
Exceptions
Namespaces
Types
decltype specifier (C++11)
Specifiers
cv specifiers
storage duration specifiers
constexpr specifier (C++11)
auto specifier (C++11)
alignas specifier (C++11)
Initialization
Literals
Expressions
alternative representations
Utilities
Types
typedef declaration
type alias declaration (C++11)
attributes (C++11)
Casts
implicit conversions
const_cast conversion
static_cast conversion
dynamic_cast conversion
reinterpret_cast conversion
C-style and functional cast
Memory allocation
Classes
Class-specific function properties
Special member functions
Templates
class template
function template
template specialization
parameter packs (C++11)
Miscellaneous
Inline assembly
 

C++ 프로그래임 언어를 기술하는데 필요한 용법에 대해서 설명합니다.

목차

[편집] 식별자

식별자는 문자, 숫자, 언더스코어(_)의 나열이며 시작 문자는 숫자가 아닙니다.

식별자는 C++ 프로그램에서 객체, 타입과 다른 요소들의 이름으로 자유롭게 사용이 가능합니다. 하지만 아래와 같은 예외 사항이 존재합니다.

  • 키워드로 사용되는 식별자는 다른 용도로 사용할 수 없습니다.
  • 언더스코어가 두개 사용되는 식별자는 예약되어 있습니다.
  • 언더스코어 두개로 시작되고 첫글자가 대문자인 식별자는 예약되어 있습니다.
  • 언더스코어 하나로 시작되는 식별자는 전역 네임스페이스에 사용하기 위해 예약되어 있습니다.

('예약'은 표준 라이브러리 헤더에 #define이나 내부에서 사용되는 이름으로 사용될 수 있다는 의미이며, 프로그래머가 해당 이름을 식별자로 사용하면 충돌이 일어날 수도 있습니다.)

[편집] 엔티티

C++ 프로그램의 엔티티는 값, 객체, 참조, 함수, 열거자, 타입, 클래스 멤버, 템플릿, 템플릿 특수화, 네임스페이스, 파라메터 팩, this 포인터 입니다.

[편집] 이름

이름은 프로그램에서 사용되는 식별자와 더불어 연산자 함수(operator+, operator bool, operator "" _km)의 이름과 템플릿 id(name<arg, arg>) 이며 엔티티를 참조하는데 사용되는 것입니다.

타입이나 템플릿 혹은 다른 엔티티의 이름이 겹칠 때 컴파일러가 어떤 엔티티를 사용할 지 결정하는 프로세스를 이름 검색이라고 합니다. 검색이 수행되지 못할 경우에는 C++프로그램이 구문분석을 계속 수행할 수 없습니다.(종종 명시적 확정을 필요로 합니다.)

[편집] 선언과 정의

선언은 C++ 프로그램에 이름을 소개 (혹은 재소개)하는 것을 말합니다. 각 종류의 엔티티는 다르게 선언됩니다. 정의는 엔티티가 어떠한 이름으로 식별될지를 선언하는 것입니다.

다음의 선언들은 정의가 아닙니다:

  • 함수의 구현이 빠진 함수의 선언

int f(int); // declares, but doesn't define f

  • 초기값 없이 extern 식별자 혹은 연결 식별자(extern "C")를 사용한 선언

extern const int a; // declares, but doesn't define c
extern const int b = 1; // defines c

  • 클래스 정의 내부에서 정적 데이터 멤터를 선언

struct S {    // defines S
    int n;        // defines S::n
    static int i; // declares, but doesn't define S::i
};
int S::i; // defines S::i

  • 클래스 이름의 선언 (전방 선언)

struct S; // 선언하고 있지만 S를 정의하고 있지 않다

  • 열거형의 불투명한 선언

enum Color : int; // 선언하고 있지만 Color를 정의하고 있지 않다

  • 템플릿 파라메터의 선언

template<typename T> // 선언하고 있지만 T를 정의하고 있지 않다

틀:cat handler

[편집] 타입

C++ 내에서의 각 객체, 참조, 함수는 타입과 연관됩니다. 타입은 선언과 함께 정의되며 바꿀 수 없습니다. 엔티티의 타입은 엔티티가 가질 수 있는 값, 동작, 의미를 정의합니다. C++의 타입은 이름뿐입니다. 따라서 두 타입이 같은 영역의 값이나 연산을 정의할 수도 있습니다. 그러나 그것들이 서로 다른 이름의 타입이라면 두 타입은 서로 호환되지 않습니다.

틀:cat handler

[편집] 객체

객체는 저장소의 영역을 말하며 저장소 기간과 타입을 가집니다.(other than function, reference, or void type).

만약 정의에 의해 객체가 만들어졌다면 그 객체는 이름을 가집니다. (new-표현이나 rvalue 연산에 의한 임시객체는 이름을 가지지 않습니다).

하나의 객체는 하위객체를 포함할 수도 있습니다. (하위객체는 클래스 멤버 하위객체, 기본 하위객체, 배열요소입니다)

일부 객체는 다형적(polymorphic)인 성질을 가집니다. 이는 프로그램이 실행되는 동안 객체의 타입이 결정지어 진다는 의미 입니다. 일반적으로 객체의 타입 정보는 오직 컴파일 타임에만 결정됩니다.

[편집] 변수

변수는 명명된 객체나 객체를 가리키는 명명된 참조 입니다. 상수 객체또한 "변수"에 참조될 수 있습니다.

[편집] 영역

틀:cat handler