전체 글

189

C++ decltype 키워드(C++11)

decltype키워드 다음 내용은 C++11부터 적용된 내용이고 C++11부터 decltype이라는 키워드가 생겼습니다. decltype키워드는 주어진 이름이나 표현식의 구체적인 타입을 알려주는 키워드입니다. 사용 방법 int a = 0; decltype(a) b = a; //a와 동일한 타입의 변수 만들기 delctype(a+b) c = a+b; //a+b와 동일한 타입의 변수 만들기 컴파일러는 어떤 타입을 사용할 것인가 컴파일러는 어떤 타입을 사용할 것인지 결정하기 위해서 체크리스트를 거쳐야 합니다. decltype(expression) var; 1 만약 expression이 괄호가 없는 식별자일 경우라면 var는 식별자와 동일한 타입이 되며, const를 포함합니다. double x = 0; dou..

프로그래밍/C++ 2019.08.26 Plorence

C++ 함수 템플릿의 특수화와 구체화

특수화(specialization) 암시적 구체화, 명시적 구체화, 명시적 특수화를 모두 특수화라고 합니다. 이들의 공통점은 이들이 일반화 서술을 나타내는 함수 정의가 아니라, 모두 구체적인 데이터형을 사용하느 함수 정의를 나타낸다는 것이기 때문입니다. 함수 템플릿에서의 명시적 특수화(Explicit Specialization) 명시적 특수화(explicit specialization)라는 특수화된 함수 정의를, 필요한 코드와 함께 제공될 수 있습니다. 컴파일러가 함수 호출에 정확히 대응하는 특수화된 정의를 발견하게 되면 템플릿을 찾지 않고 그 정의를 사용합니다. 명시적 특수화를 사용하는 이유는 특정 형식(데이터형)에 대한 범위를 줄여 특별한 동작을 하기 위해서입니다. 만약 매개변수가 int형일경우 다른..

프로그래밍/C++ 2019.08.22 Plorence

C++ 함수 템플릿(Function Template)

함수 템플릿(Function Template) 최신 C++ 컴파일러들은 가장 최근에 추가된 기능인 함수 템플릿을 구현합니다. 함수 템플릿은 int형이나 double형과 같은 구체적인 데이터형을 포괄할 수 있는 일반형(generic type)으로 함수를 정의합니다. 어떤 데이터형을 템플릿에 매개변수로 전달하면, 컴파일러가 그 데이터형에 맞는 함수를 생성합니다. 함수 템플릿 : 함수를 만들기 위한 템플릿 (정의를 말함) 템플릿 함수 : 템플릿으로부터 만들어지는 함수 (생성된 함수를 말함) 해당 용어에 대해 좀 더 자세히 알고 싶다면(https://sks3297.tistory.com/entry/C-%ED%95%A8%EC%88%98%ED%85%9C%ED%94%8C%EB%A6%BF%EA%B3%BC-%ED%85%9..

프로그래밍/C++ 2019.08.22 Plorence

윤성우의 열혈 자료구조

책에서 강조하는 그림이 있다는 점이 너무 좋고, 인강도 책사면 맨 뒤에 쿠폰번호 써져있습니다. 12개월 짜리인데 이정도면 다보고도 엄청 남을겁니다. 다른사람이 자료구조 책을 추천해달라고 하면 추천해줄만한 책입니다만 저는 애초에 자료구조 책을 이거 하나만 읽어봤습니다.

2019.08.21 Plorence

C++ 함수 오버로딩(Function Overloading)

함수 오버로딩(Function Overloading) 함수 오버로딩도 디폴트 매개변수와 마찬가지로 C++에 새로 추가된 기능입니다. 디폴트 매개변수는 개수를 다르게 사용함으로써 같은 함수를 호출할 수 있게 합니다. 반면 함수 오버로딩은 서로 다른 여러 개의 함수가 하나의 이름을 공유하는 것입니다. 함수 오버로딩은 OOP 다형성의 구현입니다. 함수 오버로딩의 핵심은 함수의 매개변수 리스트, 함수 시그니처(function signature)입니다. 함수 시그니처란 매개변수 개수, 데이터형, 순서에 대한 것입니다. 이때 반환형은 상관없습니다. #include int func1(int num1 , int num2) { return num1 + num2; } int func2(int num1, int num2) ..

프로그래밍/C++ 2019.08.19 Plorence

C++ 디폴트 매개변수(Default Parameter)

디폴트 매개변수(Default Parameter) 디폴트 매개변수는 C++에서 새로 추가된 내용입니다. 디폴트 매개변수는 함수 호출에서 실제 매개변수를 생략했을 경우에 실제 매개변수 대신 사용되는 값입니다. #include int func(int num1 = 1, int num2 = 2) { return num1 + num2; } int main(void) { int result = func(); int result1 = func(1, 2); } func()라는 함수는 매개변수 num1와 num2를 더해서 리턴하는 함수입니다. 첫 번째 함수 호출 후 리턴 값(변수 result의 값)은 3이고 두 번째 함수 호출 후 리턴 값도 동일하게 3입니다. 디폴트 매개변수는 말그대로 '디폴트'입니다. 함수호출을 하는..

프로그래밍/C++ 2019.08.17 Plorence

C++ 함수에 전달하는 값을 설명할 때 헷갈리는 점

문득 어제 게시글을 작성하다가, 이런 생각이 들었습니다. 그때 "첫 번째 인자로 100을 넘겨주고.."를 작성하다가 "parameter와 argument는 다른 건데 인자가 아닌 것 같은데?"라는 생각이 문득 들었습니다. 인자와 같이 따라다니는 놈이 있는데, 그게 바로 인수입니다. 인자 인자는 매개변수를 뜻합니다. C++ 기초 플러스에서는 아래와 같이 서술되어 있습니다. "전달되는 값을 넘겨받는 데 쓰이는 변수를 형식 매개변수(formal parameter)라고 한다." void function(int a,int b){ } a, b가 인자인겁니다. 인수 전달하는 값을 뜻하는데, C++ 기초 플러스에서는 아래와 같이 서술되어 있습니다. "함수에 전달되는 값을 실제 매개변수(actual argument)라 ..

프로그래밍/C++ 2019.08.16 Plorence

C++ 참조 변수

먼저 참조란? 참조(reference)는 미리 정의된 어떤 변수의 실제 이름 대신 쓸 수 있는 대용 이름입니다. A을 B변수의 참조로 만들면, A와 B는 같은 변수를 나타내는 것으로 사용할 수 있습니다. 참조의 주된 용도는 힘수의 매개변수에서 사용합니다. 참조를 매개변수로 사용하면 복사본이 아닌 원본 데이터를 가지고 작업을 합니다. 크기가 큰 구조체를 처리해야 하는 함수에서 포인터 대신에 참조를 사용할 수 있습니다. 참조 선언은 '&'기호로 합니다.(C, C++에서 변수의 주소를 나타내기 위해 &사용한다. C++에서는 하나의 의미를 더 추가한 것이다.) ※C에서는 참조 선언을 못한다. 참조 변수 선언 하기 int A = 10; int & B = A; //이때 B는 참조변수이다 간단한 사용법입니다. 이때 ..

프로그래밍/C++ 2019.08.15 Plorence

C++ 일반 함수와 인라인 함수의 차이(어셈블리로 확인하기)

전에 작성한 게시글(https://plorence.kr/482)에서 일부 내용을 가져왔습니다. 일반적인 함수는 아래와 같이 동작합니다. 함수 호출 명령 도달 함수 호출 명령 다음에 있는 명령 주소를 메모리에 저장 스택에 매개변수 복사후 함수가 시작되는 메모리 위치로 점프 코드 수행 리턴값을 레지스터에 복사 후 저장해뒀던 명령 주소로 돌아옴 인라인 함수와 일반 함수의 차이를 확인하기 위해 프로젝트 설정하기 VS2017 기준입니다. 프로젝트 속성 -> C++ -> 최적화로 들어가서 Ob1이나 Ob2를 선택하고 적용 -> 확인을 클릭합니다. 옵션은 MS docs에서 확인하실 수 있습니다. ( https://docs.microsoft.com/ko-kr/cpp/build/reference/ob-inline-fun..

프로그래밍/C++ 2019.08.13 Plorence

C++ 인라인 함수

인라인 함수의 탄생 프로그램의 실행 속도를 높이기 위해 C++에서 보강되었습니다. 일반 함수와의 차이점을 알려면 일반적인 함수의 호출을 알아야 합니다. 일반적인 함수의 호출:프로그램을 함수의 주소로 점프시켰다가 함수가 끝나면 원래의 자리로 돌아옵니다. 좀 더 자세하게 설명하면 함수 호출 명령 도달 함수 호출 명령 다음에 있는 명령주소를 메모리에 저장 스택에 매개변수 복사후 함수가 시작되는 메모리 위치로 점프 코드 수행 리턴값을 레지스터에 복사 후 저장해뒀던 명령 주소로 돌아옴 ※이 때문에 시간이 많이 걸림(점프 수행, 점프할 위치 기억) 인라인 함수의 특징 함수호출을 그에 대한 함수 코드로 대체합니다. 위의 사진처럼 인라인 함수 호출부분이 함수 코드로 대체가 됩니다. 그래서 점프할 위치 기억, 점프 수행..

프로그래밍/C++ 2019.08.09 Plorence

Synology C2 구독

C2라는게 이미 있는지는 알았지만, 한달 무료인 점과 100GB가 1년에 10EUR로 싸다는 것.. 저는 이미 외장하드로 이중 백업을 걸어둬서 굳이 이거까지 해야하나 싶은 의문점이 들 수도 있는데 1년에 15000원채 안되고 기업에 백업할 수 있으면 굉장히 좋다고 생각합니다. 저같은 경우 1.4TB가 쌓였지만 대부분 동영상이고, 프로그래밍, 중요한 파일들은 40GB도 안됩니다. 1년정도 시놀로지 나스를 사용했는데 아직도 100GB를 못채운거 봐서는 한동안 100GB를 채울 일은 없어보입니다. 한달 지나고 후기로 돌아오겠습니다..

Synology 2019.07.14 Plorence

[NYPC 2018 예선]줄임말 (C#)

문제 링크:https://nypc.github.io/2018/2018_online_5.html https://nypc.github.io/2018/2018_online_5.html ← 목록으로 줄임말 좀 놀 줄 알려면 줄임말을 잘 써야 한다. 요즘은 문장에서 단어들의 첫 글자만을 따와서 줄임말을 만들곤 한다. 예를 들어, '애교 빼면 시체'를 '애빼시'라고 하고 '혼자 코인 노래방'을 '혼코노'로 부른다. 문제에서 주어지는 문장들은 다음을 만족한다. 1) 한글과 영어로 이루어진 문장이다. 2) 문장은 단어들로 이루어지고 단어들 사이에는 공백이 하나 존재한다. 단어는 한글과 영어가 혼용될 수 있다. 3) 문장은 그 뜻이 명확하지 않아 nypc.github.io 코드 ...더보기 내가 try는 왜썼지..참 더..

문제풀이/기타 문제 2019.07.01 Plorence