2010-12-16 4 views
8

Eric Lippert가 Why no var on fields?에 대한 글을 C#으로 작성했습니다. 나는 궁금해서 C++ 0x에서 그렇게 할 수 있을까? 전의.C++ 0x에서 auto로 다음을 수행 할 수 있습니까?

struct mystruct_t 
{ 
    auto i = 0, d = 0.0, s = std::string("zero"); 
}; 

최신 초안을 통해 답변에 도달하지 못했습니다.

감사합니다.

+0

나는 거기에 자동이 허용되지 않는다고 생각합니다. 그러나 그렇다고하더라도 공제 실패로 이어질 수 있기 때문에 효과가 없을 것입니다. 세 가지 경우 모두 '자동'은 동일한 유형이어야합니다. – sellibitze

+0

별도의 선언에 넣는 것이 좋습니다. 우리가 실제로 예제에서 보여준 것처럼 구조체 내부에서 auto를 실제로 사용할 수 있습니까? – AraK

+4

왜 이것이 downvoted인지 나는 모른다. 유효한 질문 인 것 같습니다. –

답변

12

슬프게도 할 수 없습니다. 사양이 7.1.6.4/3에서 다음과 같이 표시됩니다.

그렇지 않으면 변수의 유형이 이니셜 라이저에서 추론됩니다. 선언 된 변수의 이름은 이니셜 라이저 표현식에 나타나서는 안된다. 이 자동 사용은 블록 (6.3), 네임 스페이스 범위 (3.3.6) 및 for-init- 문 (6.5.3)에서 변수를 선언 할 때 허용됩니다.

auto-type-specifier는 new-type-id의 type-specific-seq에서 선택 문 (6.4)이나 반복문 (6.5)의 조건으로 변수를 선언 할 때도 사용할 수 있습니다. (5.3.4), type-id (range-declaration), 그리고 클래스 정의의 멤버 - 스펙 내에 나타나는 중괄호 - 또는 - 같은 - 이니셜 라이저를 가진 정적 데이터 멤버를 선언 할 때 9.4.2).

이 섹션에서 명시 적으로 허용하지 않는 컨텍스트에서 auto를 사용하는 프로그램은 잘못 구성되어 있습니다.

비 정적 데이터 멤버의 경우 auto을 금지하는 이유는 확실하지 않습니다. 매우 편리 할 것입니다.

+0

당신의 대답은 제 것보다 훨씬 낫습니다. 실제 C++ 0x 스펙을 읽을 시간을 찾아야합니다 ... –

+0

컴파일러가 비 정적 "자동"멤버의 유형을 어떻게 결정합니까? –

+0

고마워요. @litb :) – AraK

관련 문제