2010-04-20 2 views
5

이 질문은 게시 here과 관련됩니다. 함수 호출 또는 생성자 호출에서 배열을 초기화 할 수 있습니까? 예를 들어, 클래스 foo의 생성자는 크기가 3 인 배열을 원하므로 foo ({0, 0, 0})를 호출하려고합니다. 나는 이것을 시도했으나 효과가 없다. 다른 객체의 생성자 초기화 목록에서 foo 유형의 객체를 초기화하거나 별도의 배열을 먼저 만들지 않고 foo를 초기화 할 수 있기를 바랍니다. 이것이 가능한가?함수 호출 또는 생성자 호출에서 C++ 배열 초기화

+0

먼저 배열 초기화에 대해 이야기하고 나서 클래스 객체를 suialently 초기화해야합니다. 그렇다면 초기화 할 필요가있는 것은 배열 객체 또는 클래스 객체입니다. – AnT

+0

클래스를 초기화하는 것은 내가보기에 사용한 구체적인 경우이며, 내가 질문 한 이유입니다. 그러나, 당신은 또한 크기 3의 배열을 취하고 그것을 foo ({0, 0, 0})로 부르고 싶은 함수 foo를 가질 수 있습니다. 나는 그것을 더 분명하게 만들기 위해 영업 이익을 변경했습니다. – david

+0

예,하지만 여전히 "할당하지 않고 배열을 초기화 할 수 있습니까?"라는 질문을 받고 있습니다. 네, 가능합니다. 예를 들어'int a [10] = {5}'는 요청한대로 배열을 할당하지 않고 초기화합니다. 그러나 그것은 당신이 정말로 관심있는 것처럼 보이지 않습니다. – AnT

답변

5

현재 표준에 없습니다. 그것은 C++ 당신이 시간의 생성을 강제로 캐스트를 사용할 수 있지만 표준 C 아닌 GCC에서 11

++ (C99)에서 가능합니다 :

typedef int array[2]; 
void foo(array) {} // Note: the actual signature is: void foo(int *) 
int main() { 
    foo((array){ 1, 2 } ); 
} 
+0

이것은 C99에서는 작동하지만 C++ 03에서는 작동하지 않습니다 (C++ 0x에서도 복합 리터럴이 아닙니다). –

+0

코드는 (macports) gcc에서 4.6까지 유효합니다. gcc 4.7은'오류 : 임시 배열의 주소를 가져옴 '을보고합니다. –

+0

C++ 11이 현재 표준이므로이 대답을 업데이트해야합니다. –

0

설계에서 허용하는 경우 클래스 내부의 데이터를 랩핑하고 기본 생성자에서 0 (또는 임의의 값)으로 초기화하는 것을 고려할 수 있습니다.