Lambda static vs mutable variableC++

Programme in C++. Entwicklerforum
Anonymous
 Lambda static vs mutable variable

Post by Anonymous »

Ich habe eine Lambda mit statischer Variable in der folgenden Antwort begegnet.

Code: Select all

EXPECT_CALL(my_mock, foo(_))
.WillRepeatedly(InvokeWithoutArgs([](){
static int counter = 0;
constexpr static std::array values {13, 26};
return values[counter++ % values.size()];
}) );
< /code>
Meine erste Intuition bestand darin, die Antwort stattdessen mit einem veränderlichen Zähler zu kommentieren oder zu bearbeiten: < /p>
[counter = 0]() mutable { ... }
Meine Logik war, dass der statische man unerwartet zwischen verschiedenen Benutzern geteilt werden konnte. Wenn der Test beispielsweise parametrisiert wurde und die erste Instanziierung namens my_mock.foo () ungerade Anzahl der Male namens My_Mock.foo (), startet der zweite mit 26 anstelle von 13 . Ich denke

Code: Select all

#include 

auto static_lambda() {
return []() { static int i = 0; return i++; }
}

auto mutable_lambda() {
return [i = 0]() mutable { return i++; }
}

int main() {
auto s = static_lambda();
std::printf("%d,", s());
std::printf("%d,", s());

auto s2 = static_lambda();
std::printf("%d,", s2());
std::printf("%d,", s2());

auto m = mutable_lambda();
std::printf("%d,", m());
std::printf("%d,", m());

auto m2 = mutable_lambda();
std::printf("%d,", m2());
std::printf("%d,", m2());
}
Ich habe diesen Code ausgeführt und sehe, dass er 0,1,2,3,0,1,0,1, bedeutet, dass meine anfängliche Intuition korrekt war, aber ich bin mir ehrlich gesagt immer noch nicht sicher, warum für den Sicht der Sprachanwalt.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post