• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

19.8 자료형 추론 16분 49초 강의 코드에서 컴파일 에러가 생깁니다.

21.12.31 19:50 작성 조회수 164

1

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
/Users/coding/Documents/cpp/inflearn/Chapter_19_Modern_CPP_Elements/08_Type_Inference_auto_decltype/08_Type_Inference_auto_decltype.cpp:148:16: warning: returning reference to local temporary object [-Wreturn-stack-address]
        return 123;
               ^~~
1 warning generated.

빌드시 위와 같이 에러가 발생합니다.

환경 : M1 MacBook Air

빅서 11.6.1

강의를 다시 찾아봐도 선생님 코드와 다를게 없는데도

저 에러가 발생해서 당황스럽습니다.

어떤 부분이 잘못된건지 짚어주시면 고쳐보겠습니다.

답변 1

답변을 작성해보세요.

0

강민철님의 프로필

강민철

2022.01.01

안녕하세요 :)

해당 오류 메세지는 본래대로라면 const int& 형을 return해야 하는데 사라져버릴 수 있는 지역변수를 리턴했기 때문에 발생한 경고입니다.

 

(질문자님께서 강의에서의 코드를 ex10함수, main함수를 포함하여 실수없이 동일하게 작성하셨다는 전제 하에)

강의에서는 경고가 뜨지 않았으나 질문자님의 환경에서 경고가 떴던 이유는 컴파일러의 차이 때문로 보입니다.

 

확인하신 Warning은 일부 컴파일러(g++, clang 등)에서는 문제 삼으나, 강의에서 사용된 컴파일러에서는 문제삼지 않는 경고이기 때문입니다.

이런 경고를 보지 않으시려면 반환되는 값의 자료형을 아래처럼 const int & 형으로 맞춰주는 것이 좋습니다.

이하는 간단하게 임의로 작성해본 예시 코드입니다.

#include <iostream>

using namespace std;

class Examples
{
private:
	int num = 10;
	const int& refnum = num;

public:
	const int& foo()
	{
		return refnum;
	}

	void ex10()
	{
		auto n = foo();
		typedef decltype(foo()) num_type;
	}

};

int main()
{
	Examples ex;
	ex.ex10();

	return 0;
}

 

감사합니다.