336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
Solution1
 

Solution2


블로그 이미지

뚱땡이 우주인

,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

+ Download

https://sourceforge.net/projects/boost/files/boost/1.60.0/

사이트에서 "boost_1_60_0.zip" 다운로드 받아온다

(https://sourceforge.net/projects/boost/files/boost/ 에서 최신 버전을 받으면 됨)


boost는 대부분 템플릿이다.

템플릿이 들어 있는 라이브러리는 헤더만 가지고와서 사용하면 된다.

일부 요소들은 컴파일 필요하다.


+ Boost가 뭐지?

C++ 대가들이 표준에 넣기에는 너무 오래 걸리기 때문에 우리끼리 따로 나와서 다른 라이브러리를 만들자.

그래서 검증을 마치면 다음 공식 버전에 넣자!!


+ 컴파일 방법 :

boost.org 에 들어가서  getting start (http://www.boost.org/doc/libs/1_60_0/more/getting_started/index.html)


아래 Next: Getting Started on Microsoft Windows

5.1 항목을 보자

bootstrap .\b2

위가 의미하는것은 (콘솔창에서 아래와 같이 명령어 입력)

D:\C++11_14\boost_1_60_0>bootstrap.bat

위가 끝나면 b2.exe 파일이 생긴다.

b2를 실행 (리눅스에서는 ./b2, 윈도우에서는 그냥 b2 입력)


컴파일이 끝나면 아래 폴더에 라이브러리와 헤더파일이 생성된다.

D:\C++11_14\boost_1_60_0\stage\lib 에 라이브러리

D:\C++11_14\boost_1_60_0\boost 에 헤더파일


+ 비쥬얼스튜디오에 boost 를 포함시켜보자

프로젝트 속성 > VC++ 디렉토리 > 포함 디렉토리 : D:\C++11_14\boost_1_60_0

프로젝트 속성 > VC++ 디렉토리 > 라이브러리 디렉토리 : D:\C++11_14\boost_1_60_0\stage\lib


+ 사용법


#include <boost/interprocess/ipc/message_queue.hpp>

using namespace boost::interprocess;

'ⓟrogramming > C++' 카테고리의 다른 글

[Thread] Working with threads  (0) 2018.01.04
[Thread] Handling exceptions from thread functions  (0) 2018.01.03
임시객체  (1) 2016.05.11
rvalue  (0) 2016.05.11
static_assert  (0) 2016.05.10
블로그 이미지

뚱땡이 우주인

,

임시객체

ⓟrogramming/C++ 2016. 5. 11. 21:27
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
(예제1)
#include 
using namespace std;

class Point
{
public:
    int x, y;

    Point(int a = 0, int b = 0) : x(a), y(b) { cout << "ctor" << endl; }
    ~Point() { cout << "dtor" << endl; }
};

int main()
{
    Point p1(1, 2); // p1이라는 이름으로 접근이 가능

    Point(1, 2);    // C++ 에서는 사용자가 임시객체를 명시적으로 만들수도 있다.
                    // unamed object : 이름없는 객체라고도 불림
                    // 임시객체는 수명이 자신을 선언할때 만들어져서 문장의 끝(;) 에서 파괴됨
                    // 임시 객체의 파괴는 "A" print되기 전에 dtor가 print된다.

    Point(1, 2), cout << "X" << endl; // 여기서 임시객체의 수명을 확실히 알수 있다.
                                      // 임시객체는 ; 에서 파괴가 되는데 dtor가 호출되기 전에 X가 찍히는걸 확인할수 있다.

    Point p2(1, 2);
    p2.x = 10; // 1. OK ..p2의 메모리는 계속 존재한다.

    //Point(1, 2).x = 20; // 임시객체는 =의 왼쪽에 올수 없다.
                        // 어차피 파괴될건데 이런 동작은 의미가 없다.
                        // error C2106: '=': 왼쪽 피연산자는 l-value이어야 합니다.

    //___________________________________________________________________________
    cout << &p1 << endl;
    cout << &Point(1, 2) << endl; // error. 임식객체는 주소를 얻을수 없다. (VC에서는 컴파일이 되는데... 표준에서는 안된다고 나와 있음)
                                  // <<프로젝트 속성 -> 언어>>
                                  // 언어 확장 사용 안 함 : 아니오--> 사용한다.
                                  // (의미)마이크로소프트 문법이 포함된다.
                                  // ->예로 바꾼다. (그러면 거의 표준)
                                  // 에러 발생됨!!
    // Point* p = &Point(1, 2); //error

    cout << "A" << endl;
}

(예제2)



#include 
using namespace std;

class Point
{
public:
    int x, y;

    Point(int a = 0, int b = 0) : x(a), y(b) { cout << "ctor" << endl; }
    ~Point() { cout << "dtor" << endl; }
};

int main()
{
    // 임시객체와 참조

    //Point p1;

    //Point& r1 = p1;
    //Point& r2 = Point(); // error C2440: '초기화 중': 'Point'에서 'Point &'(으)로 변환할 수 없습니다.
                         // 임시객체는 참조를 가르킬수 없다.

    const Point& r3 = Point(); // 상수 참조로는 가르킬수 있다.
                               // 수명연장의 수단, r3가 살아 있는 동안에는 임시객체가 살아 있을 수 있다.
                               // 탄생 배경은?
    //r3.x = 10; // error. 임시객체의 수명은 연장되었지만 r3는 const 이다.
    cout << "A" << endl;

    // C++11 의 rvalue reference로 임시객체를 가르킬수 있다.
    Point&& r4 = Point(); // OK...
                          // 앞에 상수가 없기 때문에 값을 바꿀수 있다.
    r4.x = 10; // ok
    // (왜 ravlue reference가 필요한가?) move 와 perfect fowarding을 배우면 알게 된다.

    // 참고
    // int& r5 = 10; // r5를 통해서 10을 바꿀수 없다.
                  // 상수는 참조할수 없다.
    // const int& r6 = 10; // 10을 가르킬게 그러나 바꾸지는 않을테닌깐 허용해줘!! OK.
                        // r6가 10을 가르키기 위해서는 메모리 공간이 잡혀야 한다.
                        // 10의 수명과 r6의 메모리 수명은 같이 간다.
                        // 결국 이것을 임시객체에도 적용하여 상수 참조로는 가르킬수 있다.

    
}
(예제3)

'ⓟrogramming > C++' 카테고리의 다른 글

[Thread] Handling exceptions from thread functions  (0) 2018.01.03
Visual Studio 에서 Boost 사용법  (0) 2016.07.28
rvalue  (0) 2016.05.11
static_assert  (0) 2016.05.10
부분전문화(partial specialization) template  (0) 2016.05.10
블로그 이미지

뚱땡이 우주인

,