• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

static const 멤버 변수의 주소는 볼 수 없나요?

22.08.15 03:09 작성 조회수 342

0

안녕하세요, 강의 듣던 중 궁금한 점이 있어 질문 드립니다.
#include <iostream>
using namespace std;


class Something
{
    public:
    static const int m_vlaue =1  ;
    int a;

};

// int Something::m_vlaue = 2;

int main()
{
    Something st1;
    Something st2;

    cout << st1.m_vlaue << " " << st2.m_vlaue << endl;
    cout << &st1 << " " << &st2 << endl;
    cout << &st1.m_vlaue << endl;
    cout << &st2.m_vlaue << endl;
    return 0;
}
 
위와 같은 코드를 작성했는데, 마지막에 static const m_value의 주소를 찍어보고 싶은데, 여기서 undefined reference to `Something::m_vlaue' 라는 컴파일 에러가 뜨네요
m_value의 주소는 st1,과 st2가 공유하고 있을 거 같아서 주소를 찍어보고 싶은데, const가 없는 상태에서만 컴파일이 되서 질문드립니다. :)

답변 1

답변을 작성해보세요.

1

강민철님의 프로필

강민철

2022.08.16

안녕하세요,

멤버 변수가static const로 선언되어 있을 경우

컴파일러는 해당 변수를 

리터럴과 다름없는 상수로 간주하여 

해당 변수를 위한 공간을 data 영역에 할당하지를 않습니다.

그래서 당연히 원칙적으로 주소에도 접근할 수 없지요.

 

만일 해당 변수의 주소에 접근하고자 한다면 static const가 아닌 const로 선언하면 됩니다.

#include <iostream>

using namespace std;

class Something
{
    public:
    const int m_vlaue =1;
    int a;
};

// int Something::m_vlaue = 2;

int main()
{
    Something st1;
    Something st2;

    cout << st1.m_vlaue << " " << st2.m_vlaue << endl;
    cout << &st2.m_vlaue << endl;

    cout << &st1.m_vlaue << endl;
    return 0;
}