https://shaharmike.com/cpp/lambdas-and-functions/ 에서 람다 함수를 살펴 보았고 아래 코드를 찾았습니다.
int i = 0;
auto x = [i]() mutable { cout << ++i << endl; };
x();
cout << i << endl;
auto y = x;
x();
y();
산출:
1
0
2
2
마지막 2 개의 문이 2와 2로 인쇄되는 이유를 이해할 수 없습니다. 'i'가 변경 가능하더라도 람다 함수 외부의 i 값에 영향을주지 않습니다. 따라서 x ()와 y ()는 1과 1을 인쇄해야합니다. 2와 2를 인쇄하는 이유를 설명해 주시겠습니까?
x
의 사본이 i
있습니다. 나는 그것을 부를 것이다 x.i
.
x(); -- prints ++x.i, aka 1
cout << i; -- prints i, aka 0
auto y = x; -- copies x into y. x.i is 1, y.i is also 1.
x(); -- prints ++x.i, aka 2
y(); -- prints ++y.i, aka 2
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다