다음 코드를 고려하시기 바랍니다. 다음 코드와 실패,다른 동작은
int main() {
A arr[2] = {{"a"}, {"b"}};
return 0;
}
:하지만 g ++ (4.9.1)이 성공적으로 다음 코드를 만들 수,
class Aggr {
private:
A arr[2];
public:
Aggr() : arr{{"a"}, {"b"}} {}
};
오류 메시지가
test.cc: In constructor ‘Aggr::Aggr()’:
test.cc:22:28: error: use of deleted function ‘A::A(A&&)’
Aggr() : arr{{"a"}, {"b"}} {}
^
test.cc:11:3: note: declared here
A(A&&) = delete;
^
는 말했다 list-initializer는 클래스 내부의 배열을 초기화하기 위해 이동 생성자를 호출하려고 시도합니다. 그러나이 코드는 경고없이 clang v3.5에 의해 성공적으로 빌드되었습니다. 그래서, 나는 C++ 11 (또는 이후 버전) 목록 - 초기화에 대한 규칙을 지정 무엇인지 알고 싶습니다. 미리 감사드립니다.
왜 'A &&'입니까? – ZivS
@ZivS 참조 번호 – bolov
가능성이있는 문제 : http://stackoverflow.com/questions/26685551/how-to-initialize-array-of-classes-with-deleted-copy-constructor-c11 – marcinj