>백엔드 개발 >C++ >C 컴파일러 오류 C2280 \'삭제된 함수 참조 시도 중\'이 Visual Studio 2015에서는 발생하지만 2013에서는 발생하지 않는 이유는 무엇입니까?

C 컴파일러 오류 C2280 \'삭제된 함수 참조 시도 중\'이 Visual Studio 2015에서는 발생하지만 2013에서는 발생하지 않는 이유는 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-10-27 12:14:02849검색

Why Does C   Compiler Error C2280

Visual Studio 2013 및 2015의 C 컴파일러 오류 C2280 "삭제된 함수 참조 시도"

Visual Studio 2013에서 다음 코드 코드 조각은 오류 없이 컴파일됩니다.

class A
{
public:
   A(){}
   A(A &&){}
};

int main(int, char*)
{
   A a;
   new A(a);
   return 0;
}

그러나 동일한 코드 조각은 Visual Studio 2015에서 오류를 생성합니다.

1>------ Build started: Project: foo, Configuration: Debug Win32 ------
1>  foo.cpp
1>c:\dev\foo\foo.cpp(11): error C2280: 'A::A(const A &)': attempting to reference a deleted function
1>  c:\dev\foo\foo.cpp(6): note: compiler has generated 'A::A' here
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

C 표준에서는 클래스가 이동 생성자 또는 이동 할당 연산자에서 암시적으로 선언된 복사 생성자는 삭제된 것으로 정의됩니다.

이 문제를 해결하려면 복사 생성자와 복사 할당 연산자를 명시적으로 제공할 수 있습니다.

class A
{
public:
   A(){}
   A(A &&){}
   A(const A&) = default;
   A& operator=(const A&) = default;
};

이것은 클래스 A의 개체를 복사 구성하고 복사 할당할 수 있습니다.

위 내용은 C 컴파일러 오류 C2280 \'삭제된 함수 참조 시도 중\'이 Visual Studio 2015에서는 발생하지만 2013에서는 발생하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.