class vs struct struct의 사용법은 다음과 같다. // 구조체 정의 struct data { int a; char b; void foo() { ... } }; // 구조체의 변수 선언 data mydata; // 함수 호출 mydata.foo(); class의 사용법은 다음과 같다. // 클래스 정의 class obj { int a; char b; void foo() { ... } }; // 클래스의 변수 선언 obj myobj; // 함수 호출 myobj.foo(); 둘 다 똑같이 멤버 변수와 메서드를 가질 수 있다. 하지만 main함수에서 호출해보면 class는 함수 호출이 되지 않는다. 왜냐하면 class는 기본 접근 지정자(access modifier)가 private이고, str..
프로그래밍/C++
std::string::compare 함수 // string int compare (const string& str) const noexcept; // substrings int compare (size_t pos, size_t len, const string& str) const; int compare (size_t pos, size_t len, const string& str, size_t subpos, size_t sublen = npos) const; // c-string int compare (const char* s) const; int compare (size_t pos, size_t len, const char* s) const; // buffer int compare (size_t pos..
JAVA, C#과는 달리 가비지 컬렉터가 없는 C++은 사용하지 않는 리소스를 해제해줘야 한다. 사용하지 않은 리소스는 메모리 누수라고 한다. 대신에 C++는 RAII라는 원칙이 있다. Resource acquisition is initialization의 약자인데, 솔직히 이름만 봤을땐 단번에 무슨 뜻인지 알기 어렵다. 간략하게 말하자면, 리소스를 클래스로 캡슐화해서 클래스의 인스턴스로 리소스를 사용하고, 스코프를 벗어나면 리소스를 자동으로 해제하는 것이다. 개체가 생성되었을때 호출되는 생성자로 리소스를 할당받으며 개체가 스코프를 벗어나면 소멸자가 호출되어 리소스를 해제한다. https://docs.microsoft.com/ko-kr/cpp/cpp/object-lifetime-and-resource-m..
유니티 C#을 하다가 알게 된 점인데, string을 +연산자로 더할때마다 새로운 문자열 객체를 생성한 뒤 반환하기 때문에 비효율적이라는 것이다. 그래서 string을 자주 변경해줘야할 경우 내부의 버퍼만 변경해주는 StringBuilder라는 클래스를 사용하는 것을 권장하고 있다. 이 점을 인지하고 있는 상태에서 C++로 문자열 관련 문제를 풀다가 +연산자로 concat을 처리하는 것을 보고 궁금해져 검색해보았다. https://stackoverflow.com/questions/611263/efficient-string-concatenation-in-c Efficient string concatenation in C++ I heard a few people expressing worries about ..