C++
[C++ 11] noexcept
msdn : c++ 11의 noexcept는 함수가 예외를 throw 할 수 있는지 여부를 지정한다. Effective Modern C++ : 함수 선언 시 그 함수가 예외를 방출하지 않을 것임을 명시할 때는 noexcept 키워드를 사용하면 된다. 함수를 noexcept로 선언할 것인지의 여부는 인터페이스 설계상의 문제이다. 함수의 예외 방출 행동은 클라이언트에게 아주 중요한 사항이다. 함수의 호출자는 함수의 noexcept 여부를 조회할 수 있으며, 그 조회 결과는 호출 코드의 예외 안정성이나 효율성에 영향을 미친다. 그러므로 함수의 noexcept 여부는 멤버 함수의 const 여부만큼이나 중요한 정보다. noexcept 함수는 비 noexcept 함수보다 최적화의 여지가 크다. noexcept는 ..
전문가를 위한 C++ 4장 : 프로그램 디자인 (1)
4장 전문가다운 C++ 프로그램 디자인 본격적으로 코드를 작성하기 전에 반드시 프로그램 디자인부터 해야 한다. 본능을 거스르는 기분이 들더라도 프로젝트를 시작할 때 시간을 충분히 투자해서 제대로 디자인하면 오히려 프로젝트 완료 시점을 앞당길 수 있다. 1. 프로그램 디자인의 정의 프로젝트를 새로 시작하거나 기존에 구현했던 프로그램을 개선하기 시작할 때 가장 먼저 할 일은 요구사항을 분석하는 것이다. 요구사항은 이해 당사자와 함께 논의한다. 요구사항 분석 단계에서 가장 핵심적인 결과는 기능 요구사항 문서다. 이 문서는 작성할 코드가 정확히 할 일만 표현하고, 그 일을 달성하는 구체적인 방법은 생략한다. 요구사항 분석 과정에서 비기능 요구사항 문서도 나올 수 있다. 이 문서는 최종 결과로 나오는 시스템에 대..
전문가를 위한 C++ : 3장 코딩 스타일
3장 코딩 스타일 제대로 작동하는 코드를 작성하는 것만이 프로그래머가 할 일의 전부는 아니다. 기본적인 코드 작성법은 누구나 쉽게 배울 수 있다. 진정한 실력은 코드를 얼마나 세련되게 작성하느냐에서 드러난다. 1. 코딩 스타일의 중요성 코드를 작성할 때는 항상 누군가가 이 코드를 넘겨받는다고 생각하자. 자신이 직접 작성한 코드도 나중에 보면 기본 로직조차 기억나지 않을 수 있다. 잘 작성된 코드에서 볼 수 있는 공통적인 속성은 다음과 같다. - 문서화 - 분할 - 명명 규칙 - 언어 사용 - 포매팅 2. 코드 문서화 프로그래밍에서 말하는 문서화(documentation)란 주로 소스 파일에 작성된 주석을 의미한다. 주석은 여러분이 코드를 작성할 당시 가졌던 생각을 다른 이에게 전할 수 있는 좋은 기회다...
전문가를 위한 C++ : 2장 스트링 (2)
1. C++ std::string 클래스 string myString = "hello"; myString += "!"; string myOtherString = myString; if (myString == myOtherString) { myOtherString[0] = 'H'; } cout
전문가를 위한 C++ : 2장 스트링 (1)
1. C 스타일 스트링 C 언어는 스트링을 문자 배열로 표현했다. 스트링의 마지막에 널 문자(\0)를 붙여서 스트링이 끝났음을 표현했다. 이러한 널 문자에 대한 공식 기호는 NUL이다. 여기서는 L이 두 개가 아니라 하나며 NULL 포인터와는 다른 값이다. char* copyString(const char* str) { char* result = new char[strlen(str)];// 버그! 한 칸 부족하다. strcpy(result, str); return result; } 위 copyString() 함수 코드에 오류가 하나 있다. strlen() 함수에서 리턴하는 값은 스트링을 저장하는 데 사용된 메모리 크기가 아니라 스트링 길이라는 점이다. 따라서 strlen()은 'hello'란 스트링에 대..
전문가를 위한 C++ : 1장 (4)
1. 유니폼 초기화 c++ 11 이전에는 타입의 초기화 방식이 일정하지 않았다. 예를 들어 다음과 같이 원을 정의할 때 한 번은 구조체로, 한 번은 클래스로 작성한 경우를 살펴보자. struct CircleStruct { int x, y; double radius; }; class CircleClass { public: CircleClass(int x, int y, double radius) : mX(x), mY(y), mRadius(radius) {} private: int mX, mY; double mRadius; }; c++ 11 이전에는 CircleStruct 타입 변수와 CircleClass 타입 변수를 초기화하는 방법이 서로 달랐다. CircleStruct myCircle1 = { 10, 10..
전문가를 위한 C++ : 1장 (3)
1. unique_ptr, shared_ptr 배열 생성 unique_ptr은 C 스타일 배열을 저장하는 데도 활용할 수 있다. 다음 예는 열 개의 Employee 인스턴스로 구성된 배열을 생성하여 이를 unique_ptr에 저장하고, 배열에 담긴 원소를 접근하는 방법을 보여주고 있다. auto employees = make_unique(10); cout
[C++ 11] 중괄호 초기화, 초기화 리스트(Initialize List)
1. 4가지 초기화 방법 int main() { int value1 = 5; // C int value2(5); // C++ int value3{ 5 };// C++ 11 유니폼 초기화(균일한 초기화) int value4{}; // C++ 11 default인 0으로 초기화됨 } 2. 중괄호 초기화 시 주의할 점 중괄호 초기화는 축소변환(narrowing conversion)을 지원하지 않는다. int main() { // 중괄호 초기화는 축소변환(narrowing conversion)을 지원하지 않는다. // 즉 자동으로 변환되는 것을 막을 수 있다. // 컴파일 에러난다. int v1{ 5.1 }; double d{ 0.5f }; int i{ d }; // 마찬가지로 컴파일 에러, 데이터가 잘리는 것..