다음 구문은 C++ 표준에 따라 유효하며이 구문 뒤에 arr은 어떻게해야합니까?크기를 지정하지 않고 배열을 할당하십시오.
char* arr = new char[];
미리 감사드립니다.
다음 구문은 C++ 표준에 따라 유효하며이 구문 뒤에 arr은 어떻게해야합니까?크기를 지정하지 않고 배열을 할당하십시오.
char* arr = new char[];
미리 감사드립니다.
아니요. 허용되지 않습니다./1 expr.new]의 새로운 표현들에 대한 문법
noptr 새로운-선언자 지정
[
식]
특성 지정자-SEQ opt
noptr-new-decla rator는 속성 지정자-SEQ 옵트 [상수 표현]은
은 분명히 코드에서 괄호 사이에 표현이 없습니다. 그리고 그것은 의미가 없습니다. 어떻게 알 수없는 길이의 배열을 할당 할 수 있습니까?
동적으로 크기를 변경할 배열이 필요한 경우 std::vector
을 사용하십시오.
'표현식 '은 어떻게 정의되어 있습니까? –
@BartekBanachewicz 그것은 '진술'이 아닌 모든 것입니다. 그게별로 도움이되지 않습니다 : http://stackoverflow.com/questions/3846727/why-is-the-difference-between-an-expression-and-a-statement – druckermanly
C++ 컴파일러는 크기가 0 인 배열을 선언 할 수있는 확장을 정의합니다. 일반적으로 구조의 마지막 필드를 선언 할 때 유용하므로 구조 할당 중에 해당 배열의 길이를 선택할 수 있습니다. 당신은하자가 편곡 말과 7 개 요소를 가지고 이러한 할당을 좋아하는 경우에
struct A
{
float something;
char arr[];
};
그래서, 당신이 할 : 당신은이를 sizeof (A)을주의해야한다
A* p = (A*)malloc(sizeof(A) + sizeof(char)*7) ;
이를 sizeof 같음 (플로트) 따라서 컴파일러의 arr 필드는 0입니다.
이제 7 개 인덱스에 도착 필드를 사용할 수 있습니다
p->arr[3]='d';
실제로이 기능은 일부 구현에 존재하지만,이 'new'를 사용하는 배열의 동적 할당이 아닙니다. – didierc
그것은 모든 기준에서 유효합니다. 의미론은 무엇입니까? – didierc
나는 유효한 *을 * 만들 수있는 예외가 사용자 정의 된 배치가 될 것이라고 생각한다. 여기서 사용자 정의 된 args는 비어있다. 하지만이 경우 주소를 전달해야합니다. –
나는 당신이 찾고 있을지도 모른다 생각한다 ['std :: vector'] (http://en.cppreference.com/w/cpp/container/vector) – sjdowling