제 질문은 간단합니다. 실제로 이에 대한 정보는 찾을 수 없습니다. 할당 연산자를 복사 (이동)해야 할당자가 구성되어야합니까?할당 연산자에 대한 요구 사항
답변
T object(object_to_copy)
또는 T object = object_to_copy
이 새 개체를 구성하기 때문에 이미 존재할 필요가 없습니다. 이것은 C++ 표준, 12.8/2 절에 문서화되어 있습니다.
위의 복사 구성과 다른 컨텍스트에서 사용되는 일반 할당 연산자는 대상 개체가 이미 존재해야합니다 (즉, 구성되어야 함). 이것은 표준의 13.5 절에서 쉽게 추론 할 수 있습니다.
@jrok 아니, 아니야, 내 첫 단락이 그것에 대해 아주 분명했으면 좋겠다. 두 번째 문장에 "어느"를 추가하여 귀하가 발견 한 모호성을 제거합니다. – Christophe
질문에서 얻을 수있는 것은 a = b
에 있는지, a
을 완전히 구성해야하는지 묻고 싶습니다.
이 경우 대답은 예입니다. a
은 할당 연산자가 호출되기 전에 완전히 구성된 개체 여야합니다. 할당은 객체와 일부 임의의 원시 비트가 아닌 두 객체 사이에서만 의미가 있기 때문입니다.
다른 답변과 달리 객체를 구성하기 전에 operator=
을 호출 할 수 있습니다. 다음 코드는 유효하고 정의되지 않은 동작을 유발하지 않습니다.
#include <iostream>
class A
{
public:
A(){
std::cout << "A()\n";
*this = *this;
}
A(const A& a) { std::cout << "A(const A& a)\n"; }
A& operator=(const A& a) { std::cout << "operator=\n"; return *this; }
};
int main()
{
A a;
return 0;
}
출력 : 그것은 어떤 이해가되지 않습니다 물론
A()
operator=
. 그러나, 질문은 무언가가 허용되는지 아닌지, 내 대답은 그렇습니다. 분명히 생성자가 끝나기 전에 operator=
이 호출되고 그러한 생성을 작성할 수 있습니다.
클래스는 초기화 프로그램 목록이 실행될 때 완전히 구성됩니다. 즉, 프로그램 흐름이 생성자에서 열기'{'에 도달 할 때까지 객체가 생성됩니다. 생성자의 중괄호 사이의 코드는 'post-construction' –
Dang으로 간주되어야합니다. 나는 대답을 지울 것이지만 표준에서 따옴표를 얻을 수 있습니까? 아니면 어디에서 인용문을 찾을 수 있습니까? 나 혼자만. – luk32
생성자는 모든 멤버 함수를 호출 할 수 있습니다. 이를 확인하기 위해 표준을 언급 할 필요는 없습니다. –
- 1. std :: map의 키 유형에 대한 할당 연산자 요구 사항
- 2. initializer_list <T> T에 대한 할당 연산자 요구 사항
- 3. cognos에 대한 사전 요구 사항
- 4. SUD에 대한 Python 요구 사항
- 5. boost :: static_visitor에 대한 요구 사항
- 6. 이미지에 대한 IEEE 요구 사항
- 7. 프로젝트에 대한 Taplytics 요구 사항
- 8. 레일 애플리케이션에 대한 요구 사항
- 9. Rebus에 대한 MSMQ 요구 사항
- 10. 시스템 요구 사항 사양 : 사용자 요구 사항?
- 11. 시스템 요구 사항 및 기능 요구 사항
- 12. 요구 사항 - 데이터로드 전 요구 사항 구성
- 13. 할당 연산자에 std :: shared_ptr 할당
- 14. 요구 사항
- 15. 요구 사항
- 16. 요구 사항
- 17. 스크럼 및 요구 사항
- 18. 부울 연산자에 대한 파이썬 확장 할당
- 19. mutableCopyWithZone 혼동되는 요구 사항?
- 20. 는 아래의 요구 사항
- 21. OpenGL 하드웨어 요구 사항
- 22. 레일 경로 : 요구 사항
- 23. KairosDB 태그 요구 사항
- 24. 데이터 요구 사항
- 25. Wordpress 테마 요구 사항
- 26. WPF TextBlock 요구 사항
- 27. 개인 프로젝트의 요구 사항
- 28. SMTP 서버 요구 사항
- 29. PrimEng 백엔드 요구 사항
- 30. 프로젝트 요구 사항
AFAIK는 기본적으로 함수 서명이 일치해야한다는 요구 사항이 없으므로 컴파일러에서 선택합니다. 더 흥미로운 점은 어떻게 구조화되지 않은 객체에 할당하고자하는 것입니까? 생성자에서 연산자를 호출 하시겠습니까? – luk32
조금 더 자세히 알려주세요 – Fiju
'a = b'에서'a'가 유효한 객체 일 필요가 있다는 것을 의미합니까? 네,'a'와'b' 모두 유효한 객체 여야합니다. – Shoe