본문 바로가기
  • 쓸쓸한 개발자의 공부방

전체 글49

[C++] range-for, if init, if constexpr range-for - C++부터 지원하는 새로운 모양의 반복문 - 배열 뿐 아니라 STL의 다양한 컨테이너 list, vector, set 등 사용이 가능하다. - auto와 같이 사용되는 경우가 많다. #include int main() { int x[10] = {1,2,3,4,5,6,7,8,9,10}; for ( auto n : x ) { std::cout 2021. 8. 12.
[C++] 함수 : Lamda expression (람다 표현식) Lamda 람다 표현식은 매우 자주 사용되며 유용하기에 필수로 알아 두어야 한다. https://en.cppreference.com/w/cpp/language/lambda 일반적인 함수는 global space에 만들어 놓고 함수의 이름을 사용해서 호출한다. lamda expression (람다표현식) - 코드 안에서 이름이 없는 함수를 만들어서 사용하는 방법 - 익명의 함수 ( anonymous function), 함수 리터럴 (literal) - 함수 반환타입과 이름을 제거하고 [ ] 를 표기해 사용한다. #include void foo(int a) { std::cout 2021. 8. 11.
[C++] 함수 : constexpr function constexpr function https://en.cppreference.com/w/cpp/keyword/constexpr constexpr 상수 constexpr int c = 1; constexpr function : 함수 앞에 constexpr 이 있는 형태 - 컴파일 할 때 값을 결정할 수 있으면, 컴파일 할 때 함수를 바로 실행한다. - 함수 인자값을 컴파일 시간에 결정할 수 없으면, 실행시간에 함수를 실행한다. constexpr int add(int a, int b) { return a + b; } int main() { int x = 1; int y = 1; int n1 = add(1, 1); // 컴파일 할 때 값을 결정할 수 있으면, 컴파일 할 때 함수를 바로 실행함. int n2 =.. 2021. 8. 10.
[C++] 함수 : 후위 반환 타입(suffix return, trailing return) suffix return type 함수를 만들 때 사용하는 새로운 표기법 (C+11부터 지원) 함수의 이름 앞에 "auto"를 넣고, 괄호 뒤쪽에 -> 반환타입 을 적어준다. 람다 표현식이나 함수 템플릿을 만들 때 주로 사용한다. //int square(int a) auto square(int a) -> int { return a * a; } //int main() auto main() -> int { square(3); } 에러 케이스 // T1, T2 두 개의 타입을 받아 처리하는 템플릿 선언하는데 에러가 발생한다. // a, b 가 선언되어 있지 않다는 에러가 발생함. template decltype(a + b) add(T1 a, T2 b) { return a + b; } int main() { a.. 2021. 8. 10.
[C++] 함수 삭제 (function delete) 함수 삭제(function delete) 지금까지 대부분은 에러를 발생시키지 않게 하기 위한 코딩을 했다면, 제대로 코딩을 하기 위해 컴파일 에러를 발생시키는(?) 함수 삭제에 대해 살펴보겠습니다. 함수 삭제 코드를 실제 본 적은 없어서 이게 왜 필요한지 잘 이해가 어려웠으나 아래 예시를 통해 이해했습니다. 함수 삭제는 간단합니다. 아래 처럼 함수 선언 뒤에 = delete;를 붙여주면 함수 삭제가 됩니다. 컴파일 과정에서 삭제된 함수를 호출하면 에러가 발생합니다. void foo(int) = delete; // 함수 삭제 int main() { foo(10); // 컴파일 에러 발생 } 왜 함수 삭제가 필요한걸까? > 암시적 변환에 의한 의도치 않은 함수 호출을 방지하기 위해서 사용합니다. 함수 삭제를.. 2021. 8. 9.
[C++] 함수 : template, inline template 타입만 다르고 구현이 동일하거나 유사한 함수의 경우 템플릿을 활용할 수 있다. 아래와 같이 square() 함수가 2개가 있을 때, 구현이 동일하기에 템플릿으로 만들어 볼 수 있다. int square(int a) { return a * a; } double square(double a) { return a * a; } int main() { square(3); square(3.3); } square 함수 탬플릿은 아래와 같은 형태로 만들어 볼 수 있다. template 의미 : 템플릿을 만들거야! 물론 type을 하나 T로 받을 거야! 하나 받으면 이 형태로 아래 형태로 만들어줘! * T는 다른 값으로도 사용이 가능하지만 약속으로 굳어져서 거의 T를 사용함. // 템플릿 사용 방법 te.. 2021. 8. 9.
[C++] 함수 : default parameter, function overloading default parameter 함수가 만들어지는 시점에 입력받는 값이 없을 경우에는 default 값이 set되게 할 수 있다. default paramater라고 말한다. c++에서는 function 정의할 때 default parameter를 지정할 수 있다. 시, 분, 초 에서 '시' 값만 입력하면 나머지 분, 초는 0로 값이 설정되게 하는 예시다. void setAlarm(int h, int m = 0, int s = 0) { // ...... } int main() { setAlarm( 3, 4, 5); setAlarm( 3, 0, 0); setAlarm( 3); // 3, 0, 0 setAlarm( 3, 30); // 3, 30, 0 } default parameter 사용시 주의사항 2가지.. 2021. 8. 8.
[C++] string : 비교, 대입, c_str() string c에서 문자열 처리 방법 직관적이지 않기에 c++에서 개선되었다. 혹은 은 c언어의 문자열 처리를 위한 헤더이다. //c에서 문자열 처리하는 방법 #include #include // int main() { char s1[32] = "hello"; const char* s2 = "world"; //s1 = s2; // 대입 : c언어는 배열의 이름을 포인터 상수로 보기 때문에 error 발생 strcpy( s1, s2); // strcpy 함수로 해결 가능 //if ( s1 == s2 ) {} // 비교 if ( strcmp(s1, s2) == 0) {} // strcmp : string compare로 비교 가능 } c++의 string에서 비교 및 대입 C++에서 String 타입이 새롭.. 2021. 8. 7.
[C++] 변수 선언 : constexpr, structure binding constexpr 컴파일 시간에 상수 값이 결정된다. (c++11 부터 도입) const 와 constexpr은 변수 값이 한 번 set되면 값을 변경을 허용하지 않는다. constexpr은 컴파일 시간에만 상수를 만들 수 있다. c++에서는 constexpr를 쓰도록 추천한다. int main() { const int c1 = 10; c1 = 20; // error constexpr int c2 = 10; c2 = 20; // error } const는 10을 바로 set해주면서 값을 지정할 수 있고, 실행시간에 알 수 있도록 n 을 우변에 넣어 줄 수도 있다. 하지만 이는 정확하지 않고 문제가 발생할 소지가 있어 c++에서 constexpr을 새롭게 소개한다. void foo( const int s).. 2021. 8. 7.
[C++] 변수 선언 : uniform initialize, auto, decltype, using c++ 변수 선언하는 방법 #include struct Point { int x = 0; int y = 0; // c++11 부터 구조체 멤버 초기화 가능해짐. }; int main() { //if ( 1 ) {} // c언어에서는 첫줄부터 변수 선언이 모두 된 이후에 코드를 넣어줬어야 했음. int n = 0; // c++에서는 중간에 변수 선언을 해도 문제없음. //struct Point pt; Point pt; // struct 사용하지 않고 바로 Point 클래스명으로 변수 선언 가능 int n1 = 0b10; // 2진수 표기법 (c++11 부터 지원) int n2 = 1'000'000; // 자릿수 표기법 (c++11 부터 지원) 사람이 읽기 좋게 하려고 사용됨. bool b = true; /.. 2021. 8. 6.