2012-11-01 3 views
2

구조체를 별도로 선언하고 초기화 할 수 있습니까?struct를 별도로 선언하고 초기화 하시겠습니까?

Ref refType(string strRef) { 
    Ref ref; 
    if (regex_match(strRef.begin(), strRef.end(), rxIdentifier)) { 
     ref = { Var, strRef }; 
    } else if (regex_match(strRef.begin(), strRef.end(), rxConstant)) { 
     ref = { Const, strRef }; 
    } 
    return ref; 
} 

작동하지 않는 것 같습니다. Visual Studio는 struct를 초기화하기 위해 {에 대해 불평합니다.

답변

4

예, 그러나 C99 및 C++ (11). C 및 C++의 이전 버전은 이와 같은 것을 지원하지 않습니다. C99에서

, 그들은 복합 리터럴라고하고, 그들은 다음과 같이 : C++ 11에서

typedef struct Point 
{ 
    int x, y; 
} Point; 
... 
Point p; 
p = (Point){3, 4}; 

, 그들은 확장 초기화 목록라고하고, 그들은 다음과 같이 : 예브게니 Panasyuk는 지적

struct Point 
{ 
    int x, y; 
}; 
... 
Point p; 
p = {3, 4}; 

그러나, 비주얼 스튜디오는 아직 C++ 11 표준과 완벽하게 호환되지 않습니다. Visual Studio 2010은 C++ 11 표준이 완성되기 전에 릴리스되었으며 당시에도 표준 초안을 완벽하게 준수하지 않았습니다. 분명히 VS2012 아직 꽤 잡았하지 않았습니다.

결과적으로 Visual Studio는 아직 확장 된 초기화 목록을 지원하지 않습니다. Visual Studio는 또한 C99을 지원하지 않으며 Microsoft는 C99을 곧 지원할 의사가 없다고 밝혔습니다.

+0

@Evgeny : 네가 맞아, 고마워. VS2010은 C++ 11 표준이 완성되기 전에 나왔습니다. 당시에는 표준 초안을 완벽하게 준수하지 않았습니다. –

1

아니, C++에서 Ref ref;은 초기화입니다. 이후 할당은 ... 음, 할당입니다.

4

C++ 11에서이 작업을 수행 할 수 있지만 초기화 작업이 아닙니다. 할당입니다.

http://coliru.stacked-crooked.com/a/819b79c4ee428537

#include <iostream> 
using namespace std; 
struct S 
{ 
    int a; 
}; 
int main() 
{ 
    S b; 
    b={1}; 
    cout << b.a; 
    b={2}; 
    cout << b.a; 
    return 0; 
} 

주, VS2010 및 VS2012 do not support initializer lists


편집 :

Ref refType(string strRef) { 
    if (regex_match(strRef.begin(), strRef.end(), rxIdentifier)) { 
     Ref ref = { Var, strRef }; 
     return ref; 
    } else if (regex_match(strRef.begin(), strRef.end(), rxConstant)) { 
     Ref ref = { Const, strRef }; 
     return ref; 
    } 
} 

또 다른 : 그건 그렇고, 당신은 당신의 코드를 변환 할 수 있습니다 ap proach는 Boost.Optional을 사용하는 것입니다,하지만 당신은이 경우에 생성자가 필요합니다

Ref refType(string strRef) 
{ 
    boost::optional<Ref> ref; 
    if(strRef=="1") 
    { 
     ref=Ref(Var,strRef); 
    } 
    else 
    { 
     ref=Ref(Const,strRef); 
    } 
    return ref.get(); 
}; 
관련 문제