2014-12-04 4 views
3

내 딸의 12 표준 C++ 교과서 배열의 표기가 (도)로 제공 될 수아래쪽 및 위쪽 경계가있는 C++ 배열 정의?

은 다음 말한다 : 배열 이름 [하한 L, 상한 U]를

이 있었다 나를 위해 놀람. 저는 파스칼이이 표기법을 가지고 있지만 C++을 알고 있습니다. 이전에는 이것을 본 적이 없었습니다. 그녀의 처방 된 컴파일러 (고대 Turbo C++ 4.5)에서 빠른 프로그램을 작성했는데 지원하지 않습니다. Stanley Lippman의 책에서이 구문을 찾지 못했습니다. 인터넷 검색이이를 포기하지 않았습니다. 아니면 정확하게 검색하지 않았을까요?

그래서 유효한 선언입니까?

+4

어떤 책인가요? –

+2

PL/1을 사용하면 C++이 아닌 그렇게 할 수 있습니다. – stark

+4

적어도 1998 년 이래로 어떤 표준에서는 그렇지 않습니다.애매한 이십년 방언을 배우는 것은 많은 시간과 노력을 낭비하는 것입니다. 나는 그 교과서 (그리고 컴파일러)를 버리고 [이들] (http://stackoverflow.com/questions)와 GCC 또는 Clang의 최신 버전 중 하나를 얻을 것이다. –

답변

3

이 선언이 형태이어야 draft C++ standard8.3.4어레이에서 유효하지 :

D1 [일정 expressionopt] 특성 지정자-seqopt

우리 할 수 있습니다. 5.19상수 표현상수 표현에 대한 문법은

입니다.
constant-expression: 
    conditional-expression 

이 문법은 우리가 이런 일을 수행 할 쉼표 연산자 중 하나를 얻을 수 없습니다 : 에서 쉼표 연산자에는 경로가 없기 때문에 다른 사람들이 암시 한대로

int a[ 1, 2 ] ; 
     ^

조건부 식입니다. 당신은 괄호를 추가하면 우리가 조건 표현부터 쉼표 연산자를 얻을 수 있지만 우리는 그렇게 우리에게 유효 할 것이다 다음 ()를 얻을 수 차 표현를 얻을 수 있습니다 :

int a[ (1, 2) ] ; 
    ^^

주, C++ 03에서는 상수 표현식에서 쉼표 연산자를 사용하는 것이 명시 적으로 금지되었습니다.

+0

배열을 액세스 할 때 사용할 수 있습니다. 어느 정도 재미 있어야합니다. – Deduplicator

3

다른 사람이 에 쉼표 연산자과 과부하로 표시되어 있고 가능성이 매우 낮은 경우가 아니면 사실이 아닙니다. 이는 거의 없습니다. 부스트 스피릿 (Boost Spirit)은 매우 다른 이유로 두 가지를 모두 수행합니다.

크기가 상수 표현식이어야하며 쉼표 연산자를 포함 할 수 없으므로 Array[x, y]은 구문 적으로 유효하지 않습니다. 그렇게하면 지정 표현이됩니다.

책을 태우고 Stroustrup을 크리스마스 스타킹에 넣어보세요!

+2

아니요, 크기가 * 상수 표현식 *이어야하며 쉼표 연산자를 포함 할 수 없으므로 (* 할당 표현식 *이되기 때문에) 'Array [x, y]'와 같은 구문이 유효하지 않습니다. –

+0

@MikeSeymour : Mike, 아주 좋은 지적입니다. 네가 괜찮 으면, 나는 대답에 그것을 포함시켰다. – Bathsheba

관련 문제