SW/C++

C++11 : 참조자와 한정자에 대해 알아볼까요?

얇은생각 2018. 12. 18. 12:30
반응형

참조자의 이해

이번 포스팅에서는 변수의 별칭을 만드는 참조자와 포인터에 대해 알아보겠습니다.

어떤 변수를 참조자로 선언하려면 다음처럼 주소 연산자(&)를 변수명 앞에 지정합니다.


int peter = 185;

int &seoul = peter;


이렇게 선언하면 seoul 변수는 int형으로 선언한 peter를 참조하게 되며 peter 변수의 별칭이 됩니다.

참고로 cout을 이용해 변수를 그대로 출력하면 값이 출력되고 주소 연산자(&)를 변수명 앞에 붙여서(&변수명) 출력하면 해당 변수의 메모리 주소가 출력됩니다.


#include <iostream>
using namespace std
 
int main()
{
    using salary = double;
    salary peter = 100.12
    salary &sangwon = peter;    
    cout<< "peter's memory address = " << &peter << endl;
    cout<< "sangwon's memory address = " << &sangwon << endl;
    return 0;
}
cs


참조자 선언은 특정 변수의 별칭을 선언하는 것이므로 반드시 특정 변수로 초기화를 해줘야 합니다.


#include <iostream>
using namespace std
 
int main()
{
    int val1 = 100;
    int &val2 = val1;
    int &val3 = 200;
    int &val4 = val2;
    int &val5;
 
    val1 = val1 * 3;
 
    cout << "val1 = " << val1 << endl;
    cout << "val2 = " << val2 << endl;
    cout << "val4 = " << val4 << endl;
 
    return 0;
}
cs


참조자는 변수의 별칭이어야 하는 데 변수가 아닌 상수를 대입하여 컴파일 오류가 발생합니다.

9행은 별칭을 만들 변수를 지정하지 않아서 오류가 발생합니다. 

7행과 9행을 주석 처리하고 실행해보세요.



한정자의 이해

한정자는 변수 앞에 선언하여 값을 변경할 수 없도록 지정하는 문법입니다.


const 변수(또는 객체)


using namespace std
int getSize()
{
    return 200;
}
 
int main()
{
    const int size = 100;
    const int bufferSize = getSize();
    size = 200;         
    const int count;     
    return 0;
}    
cs


size 변수는 직접 값을 지정하였으므로 컴파일 타임에 1--을 초기화하며, buffersize 변수는 getSize() 함수의 반환값으로 지정하였으므로 런타임에 함수를 실행해서 그 결과로 한정자 변수를 초기화합니다.



외부 참조 한정자 : extern 키워드


다른 파일에서 정의한 한정자 변수를 다른 파일에서도 사용하고 싶다면 extern 키워드를 사용하면 됩니다. 자주 사용하면 여기저기서 참조하여 코드 관리가 어려워지므로 반드시 필요한 경우에만 활용해야 합니다.


extern.h

extern const int bufferSize = 200;
extern const char[20] domain = "freelec.co.kr";
cs


#include <iostream>
include "extern.h"
using namespace std
 
int main()
{
    cout << bufferSize << ", " << domain << endl;
    return 0;
}
cs


#include <iostream>
include "extern.h"
using namespace std
 
int main()
{
    cout << bufferSize << ", " << endl;
    return 0;
}
cs


extern.h 헤더 파일에서 buffersize와 도메인을 다른 파일에서 참조할 수 있되 변경 할 수 없는 변수로 지정하여 읽도록 합니다.



참조자를 한정자로 지정


int main()
{
    const int size = 100;
    const int &size2 = size
    int &size3 = size;     
    return 0;
}
cs


위와 같이 컴파일 할시 오류가 발생합니다. 즉 한정자를 초깃값으로 참조자를 선언할 때는 반드시 해당 참조자 역시 const 키워드를 붙여서 한정자로 선억해야합니다.

반응형