inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

C개발자를 위한 최소한의 C++

임시 객체와 보이지 않는 복사 생성

일반 참조형과 const 참조형에 따라 컴파일 오류가 발생하거나 발생하지 않는 이유가 궁금합니다.

해결된 질문

518

김상현

작성한 질문수 62

0

안녕하세요. 강의 잘 보고 있습니다.

강의 내용 중 하나 이해 안되는 것이 있어 질문 남깁니다.

// 위 코드 생략
TestData testFunc(TestData& rhs)
{
// 생략
}

int main()
{
    TestData result = testFunc( 10 );
    // 생략
} 

testFunc의 매개변수로 10이 넘어갔기 때문에 묵시적으로 변환 생성자 TestData(int)가 호출된 것으로 보입니다.

따라서 testFunc은 생성된 TestData를 참조로 받고 있는 것 같은데, 왜 위처럼 코드를 작성하면 오류가 발생하는지 이해가 되지 않습니다.

// 위 코드 생략
TestData testFunc(const TestData& rhs)
{
// 생략
}

int main()
{
    TestData result = testFunc( 10 );
    // 생략
} 

위처럼 const 키워드를 붙였을 땐 오류가 안 발생하는데 이유가 무엇인가요?

c++ microsoft-windows 객체지향 디자인-패턴

답변 2

0

널널한 개발자

이유는 간단합니다. 상수 10의 자료형은 const int로 봐야 하기 때문입니다. 같은 예로 "Hello" 문자열의 자료형은 char[6]이 아니라 const char[6] 입니다. 올려준 예제를 컴파일 해보면 error C2664가 발생합니다. 이에 대한 MSDN의 자료를 보면 더 자세한 정보를 얻을 수 있습니다.

https://learn.microsoft.com/ko-kr/cpp/error-messages/compiler-errors-2/compiler-error-c2664?view=msvc-170

C++의 표준 문법은 계속 변화해왔습니다. 그리고 Visual Studo 2022 Community가 기본으로 적용하는 표준은 C++14입니다. 소위 모던 C++를 기본으로 채택하고 있는 것입니다. 같은 예제를 C++10을 기본으로 채택하고 있는 Visual Studio 2013으로 컴파일 할 경우 오류가 발생하지 않습니다. 즉, 모두 표준 문법에 따른 것입니다. 참고하시기 바랍니다.

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

강의를 듣는 도중 일반 참조형과 const 참조형의 매개변수를 가지는 함수에서 컴파일 오류가 발생하는 경우에 대해 질문하신 김상현님, 참조형 매개변수에 관련된 질문이라면, 이미 답변된 유사한 질문이 있을 수 있어 아래의 링크를 참고하시면 좋을 것 같습니다. 이 링크에서는 const 참조와 일반 참조의 차이점과 사용 상의 주의점에 대해 설명하고 있습니다. 링크를 클릭하여 자세한 내용을 확인해보세요.

답변이 도움이 되었다면 좋겠습니다. 감사합니다.

인터페이스 상속과 추상 자료형 2:00 질문

0

50

1

13분 42초의 예제

0

52

2

네임스페이스 스코프 내에서 정의된 변수, 함수들이 위치하는 곳 질문

0

47

1

소멸자 가상함수 질문

0

55

2

이동생성자의 매개변수로 넘어가는 임시객체의 값 유지 관련하여 질문이 있습니다.

0

63

2

임시 객체 복사 생성자 질문드립니다

0

66

2

변수 바인딩에 대한 의문점

0

113

1

C++ 파일 구조 질문

0

128

1

빈 포인터에 멤버함수 호출

0

104

1

파생클래스에서 virtual함수를 선언에 대한 질문입니다.

0

116

2

순수 가상 클래스 선언과 일반 인트 변수의 선언과 다른가요?

0

137

2

안녕하세요. 이동의미론에 대해 제가 잘 이해했는지 궁금합니다.

0

132

1

인스턴스의 개념에 대해 int a(3), int(5) 예시를 바탕으로한 질문입니다.

0

189

2

식별자 검색 순서 관련 namespace 생략 관련 오류에 관한 질문

0

175

1

마지막 주소록 예제 c 파일 한글 깨짐 현상

0

190

1

nullprt vs null

0

153

2

쓸데없지만 질문드리고싶습니다

0

181

1

복사 생성자 질문 드립니다.

0

221

1

생성자 궁금한거 있습니다

0

218

2

단순대입 오류 발생 이유

0

235

1

네가지 형변환 강의 질문

0

283

1

CMyString Step10 강의 질문

0

174

1

임시 객체와 보이지 않는 복사 생성 강의 질문

0

268

2

섹션8 3번째 강의 (실습 프로젝트 - 문자열 필터개선) 질문

0

219

2