너무 혼란스럽고 이것이 명백하다면 미안합니다. 다음에서 내가 틀렸습니까?
struct MyStruct
{
MyStruct(){};
MyStruct(MyStruct* arg){};
}
MyStruct (MyStruct * arg) {}; 생성자가 MyStruct에 대한 포인터 하나를 인수로 사용합니까?
내가 이것을 할 때이 생성자 (내 생각에)가 호출된다는 문제가 있기 때문에 :
int main()
{
MyStruct obj;
MyStruct* objPtr;
obj = objPtr;
return 0;
}
obj를 objPtr에 할당 할 때 컴파일러가 불평 할 것으로 예상했지만 불평하지 않고 대신 MyStruct (MyStruct * arg); 포인터 인수를 취하는 생성자라고 생각했습니다.
어떤 도움을 주시면 감사하겠습니다. 또한 복사 할당 연산자를 클래스에 추가해도 여전히 발생합니다.
편집 : 답변 주셔서 감사합니다. 이것에 대해 읽을만한 것이 있고 주제는 C ++에서 생성자를 변환하는 것 같습니다. 또한 명시적인 키워드를 추측하고 있습니다. 다음은 그것을 설명하는 SO 질문에 대한 링크입니다.
컴파일러는 할당 연산자를 합성합니다.
MyStruct& MyStruct::operator=(MyStruct const&) = default;
할당을 볼 때 연산자 후보를 찾습니다 (생성 한 연산자). 그런 다음 생성자를 사용하여 할당 ( MyStruct
)을 허용하는 유형으로 변환 할 수 있음을 확인합니다 . 따라서 다음과 같이 요약됩니다.
obj = MyStruct (objPtr);
오류가 발생하는 것을 확인하려면 생성자를 명시 적으로 표시하십시오.
struct MyStruct
{
MyStruct(){};
explicit MyStruct(MyStruct* arg){};
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다