함수 내에서 모든 로컬 변수에 auto를 사용하려고합니다. test0을 정의하는 것은 완전히 좋아하지만, TEST1 선언의 동일한 유형을 시도하는 것을 C++ : 함수를 사용하여 자동으로 클래스를 변수로 선언하기
$ g++ --std=c++1z main.cpp
main.cpp: In function ‘int main()’:
main.cpp:13:20: error: use of deleted function ‘obj::obj(obj&&)’
auto test1 = obj();
공지 사항
는 컴파일러 : 코드를 컴파일class obj
{
public:
obj() {};
obj(obj&& o) = delete;
};
int main()
{
obj test0;
auto test1 = obj();
return 0;
}
:
다음 코드를 가지고 오류. 분명히 컴파일러 오류가 있어야하지만이 경우에는 obj을 자동으로 정의 할 수 없습니까? 내가 제어 할 수없는 QT 객체로이 문제를 겪고있다.
변수를 선언하기 위해 C++ 98 형식을 여전히 사용하고 있습니까? 아니면 auto를 사용하는 다른 방법이 있습니까?
감사합니다 !!! 선언
auto test1 = obj();
그것이를 rvalue 같이 컴파일러의 우측에있는 개체를 이동하려고에서
'auto test1 = obj();'를 사용하면 "copy initialization"을 사용 중입니다. 그러나'obj'는 복사 생성자 (복사 생성자의 암시 적 생성을 막는 선언 된 이동 생성자를 가짐) 또는 constructible (삭제 된 것으로 선언 됨)으로 이동하지 않습니다. – KABoissonneault
앞으로 이러한 트랩을 방지하려면 C++의 "Rule of 5"사용을 고려하십시오. – KABoissonneault
감사합니다. 무슨 일이 일어나고 있고 왜 작동하지 않는지 이해합니다. 제 질문은 이런 종류의 수업에서 자동으로 사용할 수 있나요? 그렇다면 어떻게. –