본문 바로가기

# Lang/C++

(18)
# Lang/C++ 4.1 표현식 표현식 (Expressions)연산자와 피연산자가 모여 만들어진 것, 계산된 표현식은 하나의 값(Value)을 만들어내고, 부가적인 동작을 일으킬 수 있으며,하나의 표현식은 여러개의 서브-표현식으로 표현될 수 있다. example :표현식 2+2 -> 4표현식 pritnf("%d", 4) -> 4를 표준출력하는 부가동작 발생. 주 표현식 (Primary Expressions)주 표현식은 좀 더 복잡한 표현식을 이루는 구성단위이며,하나의 주 표현식 또한, 여러개의 주 표현식으로 구성되어있을 수 있다. 리터럴, 식별자, 범위해설 연산자( :: )가 수식된 식별자 등이 여기에 해당된다. 주 표현식의 종류 :리터럴, Literals식별자, Un-qualified identifiers 범위해설 연산자가 수식된 식..

2019. 4. 10. 21:47

# Lang/C++ 3.2 기억영역 클래스 지정자 기억영역 클래스 지정자 (Storage Class Specifiers)스토리지 클래스는 변수의 다양한 특성을 결정하며,C++에서 지원하는 스토리지 클래스는 다음과 같다. 스토리지 클래스가 결정하는 변수의 특성 :변수의 범위 생명주기링크특성 외부링크 : 외부소스의 변수를 참조.내부링크 : 내부소스의 변수를 참조. C++ 기억공간 클래스 :auto (untill C++11, 키워드의 의미가 변경됨)register (untill C++11, 폐기됨)staticexternthread_local (since C++11)mutable Auto 스토리지C++11 이전일반적으로 사용되는 변수의 스토리지 타입이다.스택에 쌓이며, 범위를 벗어나면 스택에서 제거되어 사라진다.변수의 생명주기가 자동적으로 관리된다는 뜻에서 자..

2019. 4. 6. 21:44

# Lang/C++ 3.1 CV 제한자 (const, volatile) CV 타입 제한자 (Const & Volatile Type Qulifiers)컴파일러에게 특별한 제약을 부과하는 제한자이다.각각 혼자서 사용할 수 있고, 동시에 사용될 수도 있다. const object컴파일러에게 프로그램 내에서 변수의 값의 바꾸는 것을 막으라고 알린다.사용자가 const 변수에 값을 다시 대입하면, 컴파일러는 에러를 발생시킨다.이것은 상수를 선언하는 것과 같으며, 변수에게 non-mutable 속성을 부여하는 것 이다. volatile object컴파일러에게 외부요인 때문에 프로그램에서 건들지 않아도 값이 바뀔 수 있다고 알린다.컴파일러는 volatile object를 섣불리 최적화하지 않는다. 예를 들어, 다음의 코드에서 flag는 프로그램 내부에서 변하지 않으므로 무한루프와 같다...

2019. 3. 31. 17:22

# Lang/C++ 2.3 자료형과 형변환 형변환 (Type Conversions) 어떤 데이터 타입이 다른 데이터 타입으로 변환되는 작업을 형변환이라고 하며, 누가 의도했는지에 따라 암묵적, 명시적 형변환으로 분류된다. 형변환의 종류암묵적 변환 (컴파일러가 형변환을 의도함.)명시적 변환 (프로그래머가 형변환을 의도함.) 암묵적 변환 (Implicit Conversions)T1 형식의 데이터를 T2 형식의 변수에 대입하려고 하는 경우, 컴파일러는 두 자료형 사이의 변환연산를 찾고, 프로그래머의 지시 없이 형변환을 진행한다. Example : int a = 3; double b = a; 프로그래머가 의도적으로 형변환 연산자를 사용하지 않았지만, 컴파일러는 암묵적으로 int를 double로 변환하는 연산을 찾고 형변환을 진행한다. 만약, 컴파일러가 ..

2019. 3. 29. 23:19

# Lang/C++ 2.2 자료형과 데이터 해석 정수 해석 정수 자료형이란 정수를 나타내는 원시 자료형을 말하며, 컴파일 환경에 독립적인 int16_t, int32_t, int64_t를 표준으로 사용한다. 부호있는 정수의 해석 (Signed Integer) 비트열을 부호화된 2의 보수로 해석한다. 부호없는 정수의 해석 (Unsigned Integer) 비트열을 절대값으로 해석한다. 부동소수점 해석 소수점이 둥둥 떠다닌다는 뜻으로, 부동소수점이라는 이름이 붙여졌다. 소수를 표현하는 원시 자료형. 정밀도에 따라 float(단정밀도), double(배정밀도)로 나뉘며, IEEE754 표준에 따라 비트열을 해석한다. 구조체, 클래스 해석 클래스 내의 멤버변수는 메모리 상에서 일렬로 배치된다. 클래스 내의 멤버함수는 해당 클래스의 가상 테이블에 적힌다. 자식 ..

2019. 3. 27. 19:53

# Lang/C++ 2.1 자료형 자료형데이터의 크기와 해석방법을 정의. 본래 데이터는 비트열의 형태로 저장되기 때문에,해석방법을 정의하지 않으면 해석이 불가능하다. [참고자료] 단순히 비트열만 보고 어떤 데이터인지 알 수 있을까? 자료형은 마치 파일의 확장자처럼,데이터의 크기와 비트열의 해석방법을 알려준다. 자료형의 구분자료형은 특성에 따라 3가지로 구분할 수 있다.언어에서 기본적으로 지원하는 자료형. (Built-in type, Pimitive type)프로그래머가 스스로 정의하는 자료형. (User-Defined type)어떤 자료형에서 파생되는 자료형. (Derived type) 원시 자료형프로그래밍 언어에서 기본적으로 지원하는 자료형.단, 언어마다 원시 자료형이 다를 수 있다. bool과 long의 크기에 주목하자. bool은 ..

2019. 3. 26. 21:26

# Lang/C++ 1.3 변수와 메모리 모델 C++ 프로그램 메모리 모델 변수는 올바른 주소가 할당된 뒤에야 사용할 수 있다. 그런데 그 주소는 언제 할당될까? 아무 주소나 할당해도 될까? 이 궁금증을 해소하려면, 프로그램이 RAM에 어떻게 적재되는지 이해해야 한다. 아래의 그림은 RAM에 프로그램이 적재되는 모양에 관한 레이아웃이다. 프로그램이 RAM에 적재되면 주소의 최소치(low)와 최대치(high)이 주어지는데. 모든 데이터는 low와 high 안에서 저장되어야 한다. 만약 외부영역을 건들면 (=다른 프로그램의 영역을 건들게 되면,) 운영체제에 의해 강제로 종료되는것에 주의하자. 정리하자면, 프로그램 내의 모든 변수는 low와 high내에서 주소를 할당받고. 변수의 종류에 따라 할당되는 영역이 달라지게 된다. 리터럴은 .text 영역에 저장..

2019. 3. 23. 20:53

# Lang/C++ 1.2 변수의 생성 변수의 선언, 대입, 초기화변수를 생성하는 것을 선언(Declaration)이라고 하며,선언된 변수는 메모리가 할당되어야만 사용할 수 있다. 선언과 동시에 값을 지정하는 것을 초기화(Initialization).선언된 이후에 값을 지정하는 것을 대입(Assignment)이라고 한다. #include int main() { // 선언되었지만, 초기화되지 않음. int32_t a; // 값이 대입됨. a = 0; // 선언과 동시에 초기화됨. int32_t b = a; } 변수를 초기화하는 다양한 방법Assign 연산자를 통한 초기화.Constructor를 통한 초기화.Uniform Initialization을 통한 초기화. (Since C++11)#include int main() { // (1) Init..

2019. 3. 21. 16:11