728x90
(c++) 함수 뒤 const
👨🏻‍💻 programming/◽ c, c++2024. 6. 27. 16:43(c++) 함수 뒤 const

" 함수 뒤 const " class Test { public: void ResizeVector(int num) const { vec.resize(num); } private: vector vec;} 위에 있는 함수는 컴파일이 될까? 정답은 안된다. 이유는 함수 뒤 const 때문에 vector 내장함수인 resize를 사용할 수 없다.함수 const에 대해서 간단하게 알아보자. [ 의미 ] - 해당 함수에서는 해당 객체의 멤버변수를 변경할 수 없다.  - 여기서 이번에 새로 알게 된 사실은 멤버변수에 순차 컨테이너 vector가 있었는데 vector 내장 함수도 제한 받는다는 것이다.어찌보면 당연한거지만 ...? 컴파일 전에 오류메시지를 뱉는게 신기했다...

(c++20) STL::Container #2 - contains, starts_with, ends_with
👨🏻‍💻 programming/◽ c, c++2024. 6. 17. 18:31(c++20) STL::Container #2 - contains, starts_with, ends_with

"c++20 STL::Container #2" 1. contains기존 map, set 데이터 find함수 사용 시 반복자와 end반복자가 같지 않은 지 비교하는 방식이였다. std::set s {1, 2, 3, 4, 5}; auto findset = s.find(2);if (findset != s.end()){ cout m {{1, 1000}, { 2, 2000 }}; auto findmap = m.find(2); if(findmap != m.end()){ cout second c++20에서 새로 추가 된 contains는 associate container의 내장함수로 찾으려는 키값을 넣으면 true, false로 그 key의 존재 여부를 알 수 있다. if (findset.contains(2)..

(c++20) STL::Container #1 - std::to_array, erase, erase_if
👨🏻‍💻 programming/◽ c, c++2024. 6. 17. 18:01(c++20) STL::Container #1 - std::to_array, erase, erase_if

"c++20 STL::Container #1" 1. std::to_array std::array 만드는 방법이 추가되었다. //암시적 타입 추론 auto ToArray = std::to_array("Hello World");//명시적 타입 추론auto ToArray = std::to_array({ 1,2,3,4,5,6 }); 2. std::erase, erase_if  기존에 vector 데이터 중 특정한 조건에 부합하는 데이터를 삭제하려고 할 때 여러가지 방법과 문제점을 알아보자.// 1번 ====================================================================vector vec {-1, 2, 3, 4, -5, 7, -2, 3 }; for (auto i..

(c++20) Conditional Explicit  Constructor
👨🏻‍💻 programming/◽ c, c++2024. 6. 17. 15:17(c++20) Conditional Explicit Constructor

"(c++20) Conditional Explicit  Constructor" 1. explicit // c++11 struct NoExplicit{ NoExplicit() = default; NoExplicit(int n) { cout TestNoExplicit(10); // - ???? error X  TestNoExplicit() NoExplicit struct 자료형을 매개변수로 받고 있다. 그럼 매개변수에 NoExplicit struct 이 외에 다른 자료형이 들어간다면 에러를 뱉어내는게 정상이다. 하지만 위 코드에서 TestNoExplicit(10) 에러를 뱉어 낼거 같지만 정상 작동한다. 이는 컴파일러에서  "10"을 NoExplicit(int n)" 생성자를 이용하여 암시적 형변환을 ..

(c++20) [Three-way Comparsion(3방향 비교 연산자)/우주선] 연산자
👨🏻‍💻 programming/◽ c, c++2024. 6. 14. 17:21(c++20) [Three-way Comparsion(3방향 비교 연산자)/우주선] 연산자

"(c++20) Three-way Comparsion(3방향 비교 연산자)/우주선" c++20에 추가된 것 중에 아주 편안한 연산자 오버로딩이 생겼다. !! 지금은 아니더라도(?) 아주 유용하게 쓰일 거 같은 녀석이라서 정리해본다. class나 struct를 만들어서 그 객체끼리 비교를 하기 위해서는 필요에 따라 [ '' '>=' '==' '!=' : 6개] 연산자 오버로딩을 해야한다. 하지만 여기서 c++20에 추가된 Three-way Comparsion 연산자를 사용하면 6개를 포함한 operator하나만 정의하면 된다. #include using namespace std;struct Myoperator{ Myoperator(int value) : _value(value) { } //auto ope..

(c++20) consteval, constinit
👨🏻‍💻 programming/◽ c, c++2024. 6. 14. 16:27(c++20) consteval, constinit

"(c++20) consteval, constinit" C++20에 추가된 Language 중 consteval, constinit에 대해서 알아보고 기존에 있었던 const와 constexpr과 비교해보려고한다. 일단 어떤 단어의 줄임말인지 확인하고 넘어가자 ~const: Constant 상수constexpr: Constant Expression 표현// c++11consteval: Constant Evaluation 검증  // c++20 constinit: Constrant Initialization 초기화 // c++20함수에 키워트를 붙였을 때, 변수에 키워드를 붙였을 때를 나눠서 정리해보았다.  1. 함수 (일반 vs constexpr vs consteval) 먼저 선행해야 할 개념은 런타임(..

[c++17] 전문자를 위한 c++17 새로운 내용 북마크
👨🏻‍💻 programming/◽ c, c++2024. 3. 11. 14:26[c++17] 전문자를 위한 c++17 새로운 내용 북마크

c++17에 추가된 문법을 도서 "전문가를 위한 C++17(개정4판)"에서 빠르게 찾기 위해서 정리해보았다. page 58중첩된 네임스페이스 (nested namespace)61std::byte69if문의 이니셜라이저(intializer : 초기자)72switch문의 이니셜라이저(intializer : 초기자)81구조적 바인딩(structured binding)138로우 레벨 숫자 변환 "}">#include 140std::string_view클래스298weak_ptr도 shared_ptr와 마찬가지로 C스타일 배열을 지원한다.299weak_from_this()390static 데이터 멤버를 inline으로 선언할 수 있다.530std::as_const() 헬퍼 메서드 "}">#include  (obj)..

[C++] Map의 Key로 Class/Struct 넣기
👨🏻‍💻 programming/◽ c, c++2023. 8. 11. 18:35[C++] Map의 Key로 Class/Struct 넣기

오늘은 "호랭이아인교" 병아리 블로그를 운영하는 김드스님의 포스팅을 훔쳐왔다 !! 똑같이 포스팅 해도 된다고 허락을 받았기 때문에 출처를 밝히고 거의 80% 같은 내용을 포스팅한다. 고마워요 김드스님 ~ ** Map의 Key 값으로 Class/Struct 넣기 ** 🎃목표 map의 key값으로 기본적인 데이터 타입(int, string, float, double...)이 아닌 우리가 직접 만든 타입(user defined type)을 넣어보자. 🎃특징 Map은 key(키)와 Value(값)이 쌍으로 이루어진 자료구조로 키를 통해 값에 접근 할 수 있도록 만들어져 있다. map은 key(키)의 중복을 허용하지 않고, value(값)의 중복은 허용한다. c++의 map은 레드블랙트리를 기반으로 구현이 되어있..

(c++) 인코딩(Encoding),유니코드(Unicode), 로케일, 패싯
👨🏻‍💻 programming/◽ c, c++2022. 9. 7. 12:36(c++) 인코딩(Encoding),유니코드(Unicode), 로케일, 패싯

1. 인코딩(Encoding)란? 코드화(문자의 번호를 컴퓨터에서 표현하는 방법), 암호화를 의미하며 반대말은 디코딩(decoding)이다. 어떤 정보를 정해진 규칙에 따라 변환하는 것(en-code-ing)을 일컫는다. 2. 유니코드(Unicode)란? 유니코드는 전 세계의 모든 문자를 담아 세계공통 코드 집합을 만들어 모두가 이 집합으로 인해 언어를 구현하자는 의도로 만들어졌다. 간단히 말해, 유니코드(unicode)는 모든 문자에 index를 부여하는 것이다. ( index 참고: http://www.unicode.org/charts/) ※ 한글과 같이 모음, 자음, 초성, 중성의 조합으로 여러가지 글자를 표현할 수 있는 언어는 index로 모두 줄 수 없다. 그래서 유니코드는 완전한 글자를 제공해..

(c++) 디자인 패턴 01(싱글톤, 추상 팩토리, 옵저버, 프록시, 어댑터)
👨🏻‍💻 programming/◽ c, c++2022. 8. 24. 18:38(c++) 디자인 패턴 01(싱글톤, 추상 팩토리, 옵저버, 프록시, 어댑터)

1. 싱클톤(singletion) 패턴 하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴이다. 보통 데이터베이스 연결 모듈에 많이 사용된다. 하나의 인스턴스를 만들어 놓고 해당 인스턴스를 다른 모듈들이 공유하며 사용하기 때문에 인스턴스를 생성할때 드는 비용이 줄어드는 장점이 있다. 하지만 의존성이 높아진다는 단점이 있다. 프로그램을 구현할 때 클래스의 인스턴스가 단 하나만 존재하게 만들려면 싱글턴 패턴을 적용하면 된다. 싱글턴 패턴은 유틸리티 클래스 구현에 적합하다. 많은 어플리케이션에서는 상태 정보, 디버깅 데이터, 특정한 지점에서 발생한 에러를 기록하는 클래스인 로거(logger)를 사용하는 경우가 많다. 로거 클래스는 싱글턴으로 구현하는 것이 좋다. 구현 방법: (1). static 메서드만 가지..

728x90
image