반응형

프로그래밍 언어 63

[c++11] rvalue reference

목차로 가기 이미 C++ 에서는 Reference(참조자)를 지원하고 있습니다.rvalue Reference를 설명하기 전에 기존의 Reference의 예제를 잠깐 살펴보겠습니다. ### c++#include using namespace std; int main() { int zero = 0; int& a = zero; //OK int& b = 0; // Compile Error return 0; } 아시겠지만, Reference에 0을 할당하는 것은 불가능합니다.예제를 컴파일 해보면 아래와 같은 에러를 볼 수 있습니다. (gcc 기준)g++ rvalue_reference.cpp rvalue_reference.cpp: In function ‘int main()’: rvalue_reference.cpp:8..

[C++11] Variadic template

목차로 가기 먼저 짧은 영어 탓에 variadic이라는 단어부터 찾아봤습니다.하지만, variadic이란 단어는 원래 존재했던 단어는 아닌듯 합니다. (http://en.wiktionary.org/wiki/variadic)어원은 variable 과 -adic 이 결합된 단어라고 하며, `임의의 많은 변수를 취하는` 이란 뜻입니다. C언어를 접해서 쓰고 있는 사람이라면 printf를 생각하면 쉬울 듯 합니다.printf는 대표적인 variadic function입니다.### c++// printf의 선언int printf(const char *format, ...); Variadic Template을 지원한다는 것은 결국 임의의 많은 template parameter를 취하는 템플릿을 지원한다는 것을 의미..

[C++11] unique_ptr

목차로 가기 unique_ptr는 C++에서 제공하는 스마트 포인터입니다.(TODO: 스마트 포인터에 대한 설명 추가) unique_ptr를 사용하면 동적으로 힙 영역에 할당된 인스턴스에 대한 소유권을 얻고 unique_ptr 객체가 사라지면 해당 인스턴스를 해제하게 됩니다.소유권을 갖기 때문에 인스턴스를 소유하는 unique_ptr은 동시에 두개가 되어선 안됩니다.(둘이 된 경우 소멸되는 과정에서 double free 에러가 발생하게 될 것입니다.) unique_ptr를 사용하려면 헤더를 인클루드하면 됩니다. 간단한 unique_ptr의 사용 예제입니다.### c++#include #include using namespace std; void f() { unique_ptr a(new int(3)); c..

[C++11] Type Inference: auto

목차로 가기 - 업데이트 * ts님이 지적해주신 제목 오타 수정 C/C++(C++11 이전의 C++)은 어떤 변수를 사용하려면 변수의 타입을 지정하여 선언(Declaration)을 해야만 합니다. 예를 들면 아래처럼 말입니다. ### c++int a;char b; 그러나, 템플릿과 STL등을 사용하다보면 어떤 타입을 지정하여 선언한다는 것이 간단한 일이 아닙니다.예를 들어 아래처럼 복잡한 타입을 선언해야 할 수 있습니다. (내용은 타 코드에서 아무렇게나 가져왔습니다.) ### c++HashMap map = getMap(); 이를 위해 C++11에서 등장한 두가지 타입 추론(Type Inference) 방법중 하나가 바로 auto 입니다.위 문장은 간단히 아래와 같이 선언할 수 있습니다.### c++aut..

Syntax highlighter 를 Tistory에 적용하기

간만에 블로깅을 하면서, 옛날에 설정해놨던 syntax highlighter관련 코드들이 스킨 변경으로 날라간걸 알게 되었다. 간만에 다시 설정하려고 하다가 CDN이 없을까 검색해 봤는데이미 고마운 분이 간단하게 적용할 수 있는 스크립트를 제공하고 있었다. 적용 방법은 아래 주소를 참조.http://kay.starian.kr/22 직접 적용을 원한다면, Syntax highlighter 주소 : http://alexgorbatchev.com/SyntaxHighlighter/

constructor/destructor에서 virtual method의 호출

virtual키워드를 사용해 child 객체의 메소드들을 호출할 수 있다는 것은 C++을 공부한 사람이라면 다들 알고 있는 사항이다.예를 들어, 아래의 코드에서는 child의 call method가 호출된다.### c++ class parent {public: virtual void call();};class child : public parent {public: void call();};int main(){ parent* p = new child; p->call(); // child의 call이 호출됨 } 그렇다면 child의 instance는 virtual로 선언된 메소드들에 대해서 항상 child를 호출하는가?오늘 그렇지 않다는 것을 배웠다. 아래 예제를 보자.### c++#include stati..

GCC 옵션 : version script

참고 : http://korea.gnu.org/manual/release/ld/ld-sjp/ld-ko_2.html 참고2: http://studyfoss.egloos.com/5254916 참고3: http://stackoverflow.com/questions/8129782/version-script-and-hidden-visibility gcc 옵션 중 version script라는 게 있다는 사실을 알았다. 정확히는 ld 옵션이기 때문에 gcc에서 옵션을 줄 때는 -Wl,--version-script=파일 경로 의 형태를 가져야 한다. 참고2에서는 버전 관리를 위해 사용했으나, 버전 관리 뿐 아니라 심볼 개수를 줄이는 용도로도 활용이 가능한가 보다. 예컨데,// t.c int __attribute__(..

doctype and margin

아무 생각없이 아래와 같은 CSS를 줬는데 동작하지 않아 대략 난감. body { width: 480px; text-align: center; margin-left: 0; margin-top: 0; } 한참을 헤매다 보니, HTML5로 동작하도록 태그를 준 경우와 안 준 경우에서 차이가 발생했다. 찾아보니 아래와 같은 글을 발견 http://www.webmasterworld.com/html/3533864.htm 자세한 이유는 더 분석해 봐야 할 것 같다. 일단 이유도 모르고 아래를 추가하니, 문제가 없어졌다. h1, p { margin: 0px; }

반응형