뭔가 (유효하지 않음) :
은 내가 아는 한 그것은 완벽하게 유효합니다. 음 완전히,하지만 당신은 제로 intialized 문자 배열을 얻을 수 없습니다 :
#include <iostream>
#include <cstdlib>
int main(int argc, char* argv[])
{
//The extra parenthesis on the end call the "default constructor"
//of char, which initailizes it with zero.
char * myCharacters = new char[100]();
for(size_t idx = 0; idx != 100; idx++) {
if (!myCharacters[idx])
continue;
std::cout << "Error at " << idx << std::endl;
std::system("pause");
}
delete [] myCharacters;
return 0;
}
이 프로그램은 어떠한 출력을 생성하지 않습니다.
배열과 관련된 또 다른 질문입니다. 나는 사용자 정의 타입의 배열을 만들 때 모든 elem이라는 사실을 알고 있다고 가정합니다. 이 배열의 기본값으로 먼저 초기화됩니다 왜?
new로 할당 된 각 요소를 전문화하는 좋은 구문 방식이 없기 때문에. 대신 벡터를 사용하고 미리 reserve()를 호출하면이 문제를 피할 수 있습니다. 벡터는 메모리를 할당하지만 생성자는 벡터로 push_back 할 때까지 호출되지 않습니다. 어쨌든 new'd 메모리 처리는 거의 항상 예외 안전이 아니기 때문에 사용자 관리 배열 대신 벡터를 사용해야합니다.
나는 동작이 일관성이 있어야하므로 모든 유형의 배열을 초기화하거나 초기화하지 않아야한다고 생각합니다. 그리고 내장 배열의 동작이 더 적절하다고 생각합니다.
글쎄, 당신이 표준을위한 제안서를 작성할 수 있다면 좋은 구문을 생각해 볼 수 있습니다.
개체 배열을 만들 때 사용자 정의 형식의 경우이 배열의 모든 요소가 기본 생성자로 초기화되지만, 그렇지 않은 경우 기본 제공 형식의 배열을 만들면 어떨까요? 및
배열을 사용하는 동안이 항목의 또 다른 질문입니다. 사용자 정의 유형의 배열을 만들 때이 배열의 모든 요소가 기본값으로 초기화된다고 가정합니다. 왜 이런거야? 및
내장 유형의 배열이 기본값을 사용하여 요소를 초기화하지 않는 경우 사용자 정의 유형에 대해 왜 그런가?
사용자 정의 유형은 생성자가 호출 될 때까지 유효하지 않습니다. 내장 유형은 생성자가 호출되지 않은 경우에도 항상 유효합니다.
두 번째 질문 : 배열의 요소를 초기화하는 동안 사용할 기본값을 지정할 수 있습니까? 이와 같은 것 (유효하지 않음) :
이 질문에 대한 답변
어떻게 든 기본 구성을 회피하거나 우회하는 방법이 있습니까? 예를 들어 크기 10000의 배열을 만들면 10000 기본 생성자 호출을 강제로 수행하고 나중에 (다시) 덮어 쓸 데이터를 초기화하면 낭비되는 것 같습니다.
예, 위에서 설명한대로 벡터를 사용할 수 있습니다.
진지하게 - 표준 영어 질문을 쓰는 것이 어렵습니까? "elem"이라고 입력하고 있습니다. 및 "dflt ctor"모두 "요소"및 "기본 생성자"보다 훨씬 빠릅니까? 나는이 것을 영어 이해력에 맞게 편집하여 이해를 돕지 만, 다른 사람들이 당신의 질문이 무엇인지 이해하기 위해 열심히 일할 필요가 없다면 더 나은 답을 얻을 수 있습니다. –
@atch : 나는 그것을 내 대답으로 편집했다. –
그리고 심각하게도 elem, elems, ctor, dtor 및 dflt ctor와 같은 꽤 일반적인 약어를 이해하는 데 문제가있는 사람은 없습니다 (물론 제외). 심지어 당신은 POD UDT 등을 사용하고 있습니다. –