C++
-
우측값 참조로 받은 값은 우측값일까?프로그래밍/c++ 2015. 3. 25. 17:12
우측값 참조로 받은 값은 우측값일까?나는 우측값을 처음 사용했을 때 우측값으로 받았으니 당연히 우측값이겠지! 라고 생각했었다. 마치 래퍼런스처럼 -_-;하지만 전혀 그렇지 않았다.왜 그럴까 자료를 찾아보던 중 이런 문구를 발견했다. "우측값 참조를 설계한 사람들은 우측값 참조라 정의한 것들도 좌측값, 우측값이 될 수 있다고 했다." 이 뭔 x소리야??란 생각이 들었는데, 상황은 다음과 같다 1234567c.push_back(std::string("Hello!")); // it's right value! void c::push_back(std::string&& str) // it's left value{ ...} 위 c.push_back(...)은 우측값이고, 아래의 c::push_back(... str)..
-
[c++14] shared_mutex와 shared_lock의 사용프로그래밍/c++ 2015. 3. 24. 12:52
c++14에서 추가된 shared_mutex와 shared_lock_guard는 리더즈-라이터 락(Readers-Writer Lock)이다.(리더즈 라이터 락?)컨테이너에 데이터를 추가할 땐 일반적인 lock_guard를 사용하고, 컨테이너에 있는 데이터를 사용하기만 할 때에는 shared_lock_guard를 사용한다. 사용 예를 보자 컨테이너에 데이터를 추가할 때 일반적인 lock_guard를 사용하는 모습이다.123456789 void add_thread(thread* thrd) { if(thrd) { boost::lock_guard guard(m); threads.push_back(thrd); } } 컨테이너를 순환하며 어떤 함수를 호출하는 과정에서는 shared_lock을 사용했다.1234567..
-
-
std::copy(memcpy)와 std::move(memmove)의 차이프로그래밍/c++ 2015. 2. 20. 23:05
memcopy는 서로 같은 메모리에 복사를 하는것이 아니라는걸 가정하에 하는 반면memmove는 서로 같은 메모리 영역에 복사를 할 수도 있는 상황을 가정한다. memmove위 그림처럼 같은 메모리에서 내 이동이 가능하므로 move라는 네이밍이 붙는다. 코드로 차이점을 풀어보자면... char buffer0[100];char buffer1[100]; std::memcpy(buffer1, buffer0, sizeof(buffer0)); // OKstd::memcpy(buffer0, buffer0, sizeof(buffer0)); // NO! std::memmove(buffer1, buffer0, sizeof(buffer0)); // OKstd::memmove(buffer0, buffer0, sizeof(b..
-
C++의 대체자를 꿈꾸는 새로운 언어, 러스트(RUST)아티클 2015. 2. 3. 13:33
C++ 대체를 꿈꾸는 새로운 프로그래밍 언어 러스트(RUST) 정식판이 공개된다!러스트는 C, C++처럼 빠르며 메모리 안전하고, 보다 쉬운 병렬 프로그래밍을 목표로 하는 차세대 시스템 프로그래밍 언어이다.요즘같은 멀티코어의 시대에서, 동시성과 병렬성(Concurrency & Pararrel)을 최대한 지원할 수 있도록 고안됐다는 뜻이다. RUST? 러스트(RUST)는 인터넷 브라우저 파이어폭스(FireFox)로 유명한 모질라 리서치(Mozila Research)에서 개발중인 프로그래밍 언어이다.모질라 직원인 그레이든 호아레(Graydon Hoare)가 2006년 개인 프로젝트로 시작했다가, 지난 2009년 모질라 리서치 프로젝트에 편입됐다. 모질라의 차세대 브라우저 엔진인 '서보(Servo)' 개발 언..