본문 바로가기

컴퓨터/C++_STL13

const pointer const pointer 는 선언에 따라 여러 의미를 갖는다. const type * variable_name type* const variable_name const type * const variable_name 3 가지 방법의 선언을 생각해 볼 수 있는데, 마지막 선언은 예상할 수 있듯이 앞의 두 조건을 모두 유지되는 선언 방법이다. 우선 첫 번째 선언 const type * variable_name 은 pointing 되고 있는 값을 변경시킬 수 없다. 즉, variable_name 의 값을 변경시킬 수 없다, pointer 임에도 불구하고! 따라서 *variable_name = some_value; 라고 하면 = 에 의한 값의 변경이 일어나야 하는데 그렇게 될 수 없는 것이다. 두 번째 선언, .. 2011. 11. 23.
isnan과 isinf nan 이나 inf 는 floating point 연산을 할 때 잘못된 연산에 의해 발생하는 것으로, 0 으로 나누거나 숫자가 아닌 것으로 나누려 할 때 발생하는 에러이다. 그 이외에도 꽤 많다. exp 가 over-flow 가 발생하거나, log(0) 이거나, 여하튼 여러 원인에 의하여 제대로 계산할 수 없을 경우 반환되는 값이다. 메모리가 inf 인지 nan 인지는 표준으로 정해져 있다. nan 은Not a Number, inf는 쉽게 예측할 수 있듯이 infinity 에서 왔겠지. 아놔, 연산하다 보면 아주 이놈의 inf 와 nan 때문에 열받을 때가 아주 한두번이 아니다. 에러 처리를 한다고 해도 요리조리 빠져 나가서 결국은 이놈의 nan 이나 inf 때문에 중간에 멈추거나 할 때가 있다. 따라서.. 2010. 12. 6.
동적 라이브러리 만들고 사용하기 환경: GCC 4.1.2 20080704 (Red Hat 4.1.2-46) on CentOS 5.4 프로그램이 실행 중에, 필요한 기능이 구현되어 있는 파일을 찾아서 그 기능을 사용할 수 있도록 하는, 일반적으로 말하는 plug-in 형식을 구현하기 위해서 동적 라이브러리(주로 .so 나 .dll 파일)를 이용한다. Windows의 DLL과 같은 개념인데, C++의 경우 MFC라면 확장 DLL을 이용하여 class 를 다룰 수 있지만 linux의 경우 일반적으로는 class 를 다루지 못하는 것으로 보인다. 대신, 돌아 가서, 라이브러리에서 class로 구현된 객체를 생성/파괴하는 함수를 만들고 C 로 extern 한 이후 사용하면 된다. (이 글을 읽기 위해서는 C++의 상속/가상함수, 함수 포인터 정.. 2010. 5. 25.
Strict weak ordering strict weak ordering 은 strict partial order 이면서 incomparability가 equivalence를 의미하는 order 이다. 우선 strict partial order의 정의를 살펴 보자. 집합 A와, A에서 정의된 relation〈 에 대하여〈 가 다음 두 조건을 만족시키면〈 는 strict partial order이다. i) a〈 a 는 성립하지 않는다 (nonreflexivity) ii) a〈 b 이고 b〈 c 이면 a〈 c 이다 (transitivity) for a, b, c ∈ A. 이 때 strict partial order 이기 때문에 〈 는 A의 모든 원소에 대해 비교가능할 필요는 없다. 이 상태에서〈 가 weak ordering 이 되면서 추가되는.. 2010. 5. 11.