2023. 9. 25. 10:56ㆍ개발하는중/cpp
키워드와 식별자
키워드(keyword) ?
c++에서 미리 용도를 정해 놓은 단어
반드시 전해진 용도로만 하용 해야함
ex) #include , using , namespace, return
식별자(indentifier)?
여러 가지 대상을 구분하기 위해 만든 이름
-변수, 함수, 클래스 등의 이름
규칙
-첫 자는 비숫자 문자를 사용함(c++ 11부터 다국어 문자 포함)
이후의 문자는 비숫자 문자와 숫자를 사용함(특수문자 사용 불가)
길이 제한은 없음
키워드는 식별자로 사용할 수 없음
_문자로 시작하는 이름은 사용하지 않는 것이 좋음
적절한 식별자
ex) myname, my_name(snake case), myName(camel case), MyName(pascal case), a3, VALUE, Int, initial_value, 합계(C++ 11이후), $price (마이크로소프트 C++에서)
사용할 수 없는 식별자
ex) 7days, my name, my#name, int, initial-value, min:value
기본자료형 및 상수와 변수
c++자료형
기본
-정수 char, int, chort, long, bool
-실수 float, double, long double
복합
-배열, struct, class, enum, union, 포인터, 참조
정수 자료형(integral types)
고정소수점(fixed-point) 방식의 숫자 표현
overflow 발생하지 않도록 주의 해야함
문자 표현 = char
정수 표현 = int short long long long
signed 또는 unsigend 사용
참/거짓 표현 = bool : true, false
다국어 표현 = wchar_t, char14_t, char32_t
실수자료형
부동소수점(floating-point) 방식의 숫자 표현
float(4byte)
double(8byte)
상수표현 –리터럴(literal)
정수형 리터럴 표현
숫자를 표현하는 문자와 부호만으로 표현
0~9까지의 숫자
10~15에 해당되는 16진수를 표현하기 위한 문자 a~f & A~F
159 = 10진수 int형 상수
0b10011111 = 2진수 int형 상수
0237 = 8진수 int형 상수
0x9f = 16진수 int형 상수
접미사를 이용한 정수 리터럴 자료형 지정
123 = int
123u = unsigned int
123L = long
123ul = unsigned long
123ll = long long
문자 리터럴 표현
작은 따옴표(‘’)안에 문자 표기
8진수나 16진수 문자 코드로 표기
'A' =문자 ‘A’ (ASCII 코드에 해당되는 정수 65와 동일)
'\101'= 'A'와 동일함 (65의 8진수 표현)
'\x41'= 'A'와 동일함 (65의 16진수 표현)
실수형 리터럴의 표현
소수점이 있거나 10의 거듭제곰을 표현하기 위한 지수 기호인 e가 있으면 실수형 리터럴임
double형 값 1200 = 1200. / 1200.0 / 12e2 / 1.2e+3
float형 값 1200 = 1200.0f / 12e2f
변수?
프로그램이 실행되는 동안 기억하고 있어야 하는 값들을 저장하는 메모리 영역
변수에는 자료형과 이름이 지정 되어야함
모든 변수는 사용하기 전에 미리 선언 해야함
변수의 초기화
ex1) int total = 0;
ex2) int total(0);
ex3) int total{0};
자료형 추론
변수를 초기화할 때 초기화하는 값의 자료형으로 변수의 자료형을 추론함
ex) auto i(10); // int i(10); 동일
변수의 사용 영역(scope)
변수가 유효성을 갖는 영역
int a; //선언된 이후 프로그램의 전체 영역에서 사용 가능
static int b{10}; //선언된 이후 소속 파일의 전체 영역에서 사용 가능
int f() {
int c{20}, d{30}; //선언된 이후 소속 블록의 전체 영역에서 사용 가능
{
int d{40}; //선언된 이후 소속 블록의 전체 영역에서 사용 가능
int e{50};
······
}
······
}
extern int{a}; = 다른 소스파일의 선언된 a
const 한정어
변수의 값을 수정할 수 없게함
초기화를 통해서만 값을 정할 수 있음
ex) const double PI {3.141592};
#difine PI 3.141592 // 매크로 상수 정의 C언어
constexpr한정어
그 값을 컴파일할 때 평d가 한다는 의미
실행 중 평가하는 것에 비해 효율적으로 동작할 수 있게 함
ex)
int a;
std::cin >> a;
const int b = 20;
const int C1 = a; // cin을 통해 입력된 a의 값으로 초기화
constexpr int C2 = a + 10; // 오류: 컴파일 시에 a의 값을 알 수 없음
constexpr int C3 = b + 100; // b + 100을 컴파일 시에 계산할 수 있음
constexpr int C4 = C1 * 2; // 오류: 컴파일 시에 C1의 값을 알 수 없음
constexpr함수
모든 인수가 constexpr인 경우 컴파일할 때 값을 구할 수 있게함
ex)constexpr int temp(int n){
return n + 1;
{
void t(){
constexpr int a = temp(5); // 컴파일할 때 계산됨
int b = temp(5); // 실행 중 계산
}
변수의 유효기간(lifetime)?
변수가 언제 만들어져서 언제 없어지는가를 나타냄
자동 변수
생성 시점 : 함수(블록)가 시작될 때
소멸 시점 : 함수(블록)가 종료될 때
정적 변수
생성 시점 : 프로그램이 시작될 때
소멸 시점 : 프로그램이 종료될 때
연산자
2항연산, 단항연산, 대입연산, 복합대입연산, 관계연산, 논리연산, 비트단위연산, 조건연산
자료형의 변환
묵시적 형 변환 개요
두 값 사이의 연산에서는 우선순위가 낮은 자료형의 값이 순위가 높은 자료형의 값과 같은 형으로 변환됨
여러 개의 연산으로 구성된 수식에서 묵시적 형 변환은 연산자 단위로 이루어짐
대입 연산자(=)는 값을 저장할 변수의 자료형으로 묵시적 형변환을 함
오차나 오버플로가 발생할 수 있으므로 주의
형변환 연산자
static_cast : 연관된 자료형 간의 형 변환을 처리하며,변환 처리는 컴파일 단계에서 정해짐
dynamic_cast : 기초 클래스와 파생 클래스 간의 포인터 또는 참조 형 변환이 프로그램 실행 중에 일어나도록 지시함
reinterpret_cast : 관련이 없는 자료형 사이의 변환을 처리하는 연산자로, 포인터를 다른 자료형의 포인터나 정수 자료형으로, 또는 그 역으로 변환함
const_cast : const 지정을 일시 해제함
C++에서 사용하는 단어는 반드시 정해진 용도로 사용하도록 지정된 키워드와 프로그램 내에서 여러 가지 대상을 구분하기 위해 만드는 식별자가 있다.
문자, 정수, 참/거짓, 실수를 표현하는 기본 자료형과 복합 자료형을 사용할 수 있다.
값을 저장하기 위해 사용하는 변수는 사용하기 전에 자료형과 이름을 미리 선언해야 한다.
블록 안에 선언된 변수는 소속된 블록에서만 사용할 수 있는 지역변수이다.
const 한정어는 변수의 값을 변경할 수 없게 하며, constexpr 한정어는 변수나 함수의 값을 컴파일할 때 평가할 수 있게 할 수 있다.
지역변수는 자동 유효기간, 전역변수 및 정적 지역변수는 정적 유효기간을 갖는다.
연산자는 산술, 논리, 관계, 비트 단위 논리, 대입 등의 처리를 하는 데 사용된다.
서로 다른 자료형이 연산에 사용될 경우 우선순위가 높은 자료형으로, 대입 연산의 경우 값을 저장할 변수의 자료형으로 묵시적 형 변환이 일어난다.
형 변환 연산자를 이용하여 명시적으로 자료형을 변환할 수 있다.