2017-10-30 23 views
0

나는 article on rvalue-references을 읽고 있어요,하지만 난 다음 발췌 혼동이 될 것 : 여기 `a = b()`는`a`와`b`가 모두`X` 클래스 일 때 무엇을 의미합니까?

X foo(); 
X x; 
// perhaps use x in various ways 
x = foo(); 

는, X는 일부 사용자 정의 유형입니다.

나는 X foo();이 X의 생성자를 호출한다는 것을 알고있다. 나는 꽤 확신한다. X x;.

그러나 라인 x = foo();은 무엇을 의미합니까? 라는 생성자가 있습니까? 그리고 x = foo;는 무엇을할까요?

시도해보십시오.이 코드의 의미를 알아 내기 위해 내가 찾는 올바른 단어를 찾을 수 없었습니다.

+9

'X foo();'는 함수 선언입니다. – tkausl

+3

당신은 * "나는 X의 생성자를 호출하지 않을 것이다"라고 쓰고 * 왜 이것을 말합니까? – MFisherKDX

+0

C++이 생성자를 호출하지 않고 객체를 선언하는 메소드를 제공해야하므로 그 인상을 받고있었습니다. – Mahkoe

답변

7

나는 그것을하지 않습니다, X foo();는 X의 생성자

없음 전화 것이라는 점을 알고있다. 인수를 취하지 않고 함수 X를 반환하는 foo라는 함수를 선언하지만 정의하지는 않습니다.

나는 꽤 X x;이 아닐 것이라고 확신합니다.

예, 사용 가능합니다. 이해에 위의 수정과 함께, 귀하의 질문에 대한 대답은 지금은 분명,하지만해야합니다

그러나

, 라인 x = foo();은 무엇을 의미합니까?

이는 foo라는 함수를 호출하고 그 결과를 x에 저장한다는 것을 의미합니다.

+0

호기심 ... 궁금한 점이 ...이 경우 두 가지 더 중요한 질문이 생깁니다. 유형 X의 객체를 선언하고 생성자를 호출하지 않고 X foo()는 X를 반환하고 인자를 가지지 않는 함수를위한 프로토 타입이고 "인자를 가지지 않는"생성자에 대한 호출을 생성하는 X 유형의 객체의 선언이 되는가? – Mahkoe

+3

* "유형 X의 객체를 선언하고 생성자에 대한 호출을 생성하지 않으려면 어떻게해야합니까?"* - 할 수 없습니다. 하지만 그렇게 할 수 있다면 메모리 할당 일 뿐이며 C++에서 메모리를 할당하는 다양한 방법이 있습니다. –

+1

* "X foo();"함수의 프로토 타입 "과"객체 선언 "의 차이점을 어떻게 설명 할 수 있습니까?"* - 쉽습니다. 항상 전자입니다. 후자는 절대 안된다. –