2014-03-05 2 views
2

std :: array에 기본값을 지정하는 방법은 무엇입니까? 예를 들어, 다음과 같습니다.Visual C++ 2012에서 std :: array에 기본값을 지정하는 방법은 무엇입니까?

void f(std::array<int, 3> pt = std::array<int, 3>{0, 1, 2}); 

유용한 의견으로 확인한 후 컴파일러 때문이라고 생각합니다. std::array<int, 3> MakeArray(...)과 같은 기능을 만들지 않고 VS 2012로 어떻게 작동합니까?

+3

당신이 그것을 시도해 봤어 중 하나로 GCC를 위해 쓸 수 있는가? 힌트 : 작동합니다. –

+0

그 것처럼. 너를 위해 일하지 않니? –

+1

컴파일러에게 물어 보셨습니까? 내가 내게 물었 기 때문에 그는 그걸로 잘 살았다. – Borgleader

답변

3

는 다음

void f(std::array<int, 3> pt = {0, 1, 2}); 

시도하거나 단순히

void f(std::array<int, 3> = {0, 1, 2}); 

는 GCC에서이 코드가 컴파일되지 작성합니다. 그것은 컴파일러의 버그 인 것 같습니다. 그러나 당신은

void f(std::array<int, 3> = std::array<int, 3>({ 1, 2, 3 })); 

또는

void f(std::array<int, 3> = { { 1, 2, 3 } }); 
+0

이것은 GCC 4.8에서 나에게 적합하지 않습니다. ('f()'를 호출하면''배열은 중괄호로 묶인 초기화 프로그램으로 초기화해야합니다. ') 오류가 발생합니다. OP 버전이 효과가 있습니다. – interjay

+0

@interjay, Clang에서 작동하지만 GCC는 이중 중괄호를 원합니다. – chris

+0

@interjay 업데이트 된 게시물을 확인하십시오. –

관련 문제