2011-04-22 6 views
0

C++은 생성자에서 아무 것도 반환 할 수 없다고 말합니다. 그 뒤에있는 역사적인 이유는 무엇입니까? Bjarne는 왜 다른 멤버 함수와 달리 컨트 리뷰 터가 뭔가를 반환하지 못하게 했습니까?왜 우리는 생성자로부터 아무것도 반환 할 수 없습니까?

+6

을에 refrence로 돌아갑니다이다? – BlackBear

+1

생성자로부터 * something *을 반환하겠다는 제안에 대한 어떤 근거가 있습니까? 나는 그것이 의미가 없다고 말할 것입니다, 그것이 왜 * 무언가를 돌려주지 않는 이유입니다. – Nawaz

+0

BlackBear 클래스의 객체입니다. 그게 암묵적인 건 알지만 왜? – user724619

답변

4

new 문 또는 변수 이니셜 라이저에서 개체를 생성 할 때 반환되는 개체가 생성되는 새 개체이기 때문입니다. 생성자에서 반환 된 객체로 무엇을 할 것입니까? 그것은 어느 곳에서나 반환 될 수 없었습니다. 그것은 반환되는 생성되는 객체입니다. 해당 객체는 생성자가 호출되기 전에 이미 (부분적으로) 생성되었으며 (그렇지 않으면 생성자가 작업 할 객체가 없을 것입니다.) 생성자에서 반환되는 객체 여야하므로 사용자를 만들지 않습니다. 그것을 돌려 보내거나 그들이 다른 것을 돌려 주려고 노력함으로써 혼란스럽게 만들도록 허락하십시오.

+0

. 당신의 대답을 수락했습니다. – user724619

+0

temporaries -'std :: string ("hello, world")'도 고려해보십시오. 이것은 변수 이니셜 라이저가 아닌 새로운 명령문이므로 다른 객체를 반환 할 수 있다고 간단히 상상할 수도 있습니다. 그러나 객체가 차지하는 메모리가 생성자에 의해 제공되지 않는다면 임시 객체를 위해 생성 된 스택 공간 이외의 객체가 될 수있는 합리적인 방법이 없으며 이것을 "단지"라고 생각하지 않는 것이 가장 좋습니다. 생성자에 대한 호출 "을 참조하십시오. –

1

에만 개체 자체를 얻을 수 생성자 ...

3

내가 자신을 반환 등의 생성자 생각하지만, return 문이하지 않고.

자체를 반환하면 다른 것을 반환 할 수 없습니다.

2

비얀 (Bjarne)은 말할 수 없지만 생성자를 관찰하는 관용적 인 방법은 생성 된 객체를 반환한다는 것입니다.

+0

:) 그러므로 용어는 - 충분합니다. 충분히 정확합니다. – KevinDTimm

1

생성자가 무언가를 반환하면 생성자에게 하나 (일반적으로 바람직하지 않은 것) 대신 두 가지 작업을 제공한다는 점 외에도 생성자를 명명 할 수 없으므로 명시 적으로 호출 할 수 없다는 점에 유의하십시오. .

생성자에 대한 명시 적 호출 인 표현식을 구성 할 수 없기 때문에 어떤 경우에도 생성자의 반환 값을 지정하거나 지정할 수 없습니다.

생성자에서 무엇인가를 반환하려고하면 언어 디자인에 전혀 적합하지 않습니다.

생성자는 객체를 "반환"하지 않으며 객체가 호출되는 메모리 영역에서 객체를 초기화합니다. 정적 저장 기간을 가진 클래스 유형의 객체를 선언하고 (해당 유형에 사용자가 선언 한 생성자가있는 경우) 메모리는 프로그램 수명 동안 예약되며 구현시 생성자가 호출되어 해당 위치에서 객체를 초기화합니다 프로그램의 적절한시기에

마찬가지로 자동 저장 기간을 사용하여 선언하고 객체화하면 구현시 선언문을 실행할 때마다 공간 (비공식적으로 일부 스택 공간)을 예약하고 생성자를 호출합니다.

새로운 표현식의 경우 메모리가 동적으로 할당되며 구현은 해당 생성자를 호출하여 객체를 초기화합니다.

X이 클래스 유형 인 경우 이러한 모든 문에있는 X은 항상 유형의 이름을 참조하며 실제로 이름이없는 생성자는 참조하지 않습니다. 생성자를 선언하거나 정의하는 구문은 특별하므로 생성자에 이름이 있음을 의미하지는 않습니다. X에 사용자가 선언 한 생성자가 있다고 가정합니다.이미 전을 위해 refrence_id (객체로 호출되는) 변수에 refrence 수를 반환 bacause

X x; // Initialize an object of type X using the default constructor 

X(); // Value initialize a temporary of type X. Not an explicit constructor call. 

new X(); // new expression: value-initialize a dynamically allocated X 

X(a); // A function style cast 

X(a, b); // Construct an X from the expression list. X must have a 
     // suitable constructor but the X still refers to the type. 
0

생성자 retunrn 유형이없는 : - EMP를 E1은 = 새 EMP를 (refrence_id는) 여기에 EMP를가 class_name을이다 E1은 새로운 동적 할당 EMP를 (에 사용되는에 refrence 변수)이 생성자 클래스 EMP를 의 생성자가 refrence_id 당신은 무엇을 반환 변수 E1

관련 문제