SomeStruct가 아래와 같이 주어지면 :
struct SomeStruct {
int i;
char c;
};
아래는 컴파일되지 않습니다.
int main() {
std::array<SomeStruct,2> arr = {{3, 't'}, {3, 't'}};
}
그러나 아래 코드는 작동합니다.
int main() {
std::array<SomeStruct,2> arr = {SomeStruct{3, 't'}, SomeStruct{3, 't'}};
}
그리고 이것도 작동합니다.
int main() {
std::array<SomeStruct,1> arr = {{3, 't'}};
}
std::array<SomeStruct,2> arr = {{3, 't'}, {3, 't'}};
이로 인해 컴파일 오류가 발생하는 이유는 무엇 입니까?
또한 더 간결한 방법이 std::array<SomeStruct,2> arr = {SomeStruct{3, 't'}, SomeStruct{3, 't'}}
있습니까? arr.fill(SomeStruct{3,'t'})
또는 루프 를 사용하고 싶지 않습니다 . SomeStruct{3, 't'}
초기화시 모든 항목을 동일하게 설정하고 싶습니다 .
경험상 std::array
초기화가 작동하지 않는 것 같으면 작동 할 때까지 중괄호 쌍을 계속 추가하십시오.
std::array<SomeStruct,2> arr = {{{3, 't'}, {3, 't'}}};
그 이유와 역사는 길고 복잡하기 때문에 집계 초기화 (C 호환성의 사마귀)와 집계되지 않은 목록 초기화 (C ++ 11에 추가됨) 사이의 경합으로 귀결됩니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다