아래 코드를 참조하십시오. 올바른 출력은 "10 20 30"이지만 Release에서는 "0 0 0"을 빌드합니다. 왜 이런 일이 생길까요?람다에서만 사용되는 경우 릴리스 빌드에서 초기화되지 않은 로컬 정적 변수
std::vector<int> inValues = {1, 2, 3};
std::vector<int> outValues(inValues.size());
static const int mag = 10;
std::transform(inValues.cbegin(), inValues.cend(), outValues.begin(),
[](const auto value){
return value * mag;
});
for (const auto value: outValues)
std::cout << value << " ";
변수가 function 내부 어디에서나 언급되거나 전역 범위에서 선언되는 경우 모두 예상대로 작동합니다.
나는 당신을 생각 : 당신이
static
규정 유지에 대한 단호 인 경우그렇지 않으면, 당신은 너무 값이 컴파일시 멀리 최적화되지, 그것을 정의 직후
mag
를 사용하는 척 수 정적 변수를 캡처 할 필요가 없습니까? – frslm@frslm 네가 맞아. 이것은 Visual Studio 버그입니다. 이스터 에그를 찾아 +1하십시오. –
clang 툴셋으로 빌드를 시도했지만 완벽하게 작동합니다. 그래, 그 버그. –