vector<T>
는 벡터의 크기를 사용하는 생성자를 가지고 있으며, 내가 아는 한 그것은 내가 할 수없는int에서 vector 로의 암시 적 변환?
void f(std::vector<int> v);
int main()
{
f(5);
}
을 컴파일하려면 다음 코드가 실패한다는 사실에 의해 입증 할 수 명시 적입니다 이해하고 설명을 요구하고있는 다음 코드는
std::vector<std::vector<int>> graph(5, 5);
뿐만 아니라 그것은 컴파일 않으며, 실제로 것이다 5 그래프의 크기를 조정하고 오 제로의 벡터에 각 요소를 설정, 즉 동일한을 수행하는 컴파일 이유 코드는 보통 다음과 같습니다 :
std::vector<std::vector<int>> graph(5, std::vector<int>(5));
어떻게? 왜?
컴파일러 : MSVC10.0
확인, 그것이 MSVC 버그 (또 다른 하나) 것 같다. 누군가가 (즉,이 재생되는 경우를 요약) 응답의 버그에 정교한 수 있다면 나는 기꺼이 그것을
이것은 (올바르게) GCC 4.7에서는 컴파일되지 않습니다. 또 다른 MSVC++ 표준 외의 이상 함. 그들은 아마도 생성자'explicit'을 표시하는 것을 잊어 버렸을 것입니다, 당신은''을 파헤쳐 그것을 검사 할 수 있습니다. –
syam
@syam : 열에 기쁘다. GCC에서 컴파일하는 데 실패하지만 실제로 이상한 점은 첫 번째 예가 MSCV에서 컴파일되는 반면 다른 예에서는 MSCV가 컴파일되지 않는다는 점이다. 그게 정말 이상한거야 –
@ArmenTsirunyan VS2012에서 컴파일하지 마십시오; 오류 메시지는 생성자가 '명시 적'임을 나타냅니다. – Praetorian