在Stack Overflow问题中,在C++ 11中不允许重新定义lambda,为什么?,给出了一个不编译的小程序:
int main() {
auto test = []{};
test = []{};
}
Run Code Online (Sandbox Code Playgroud)
问题得到了回答,一切似乎都很好.然后是Johannes Schaub并做了一个有趣的观察:
如果你
+在第一个lambda之前放置一个,它会神奇地开始工作.
所以我很好奇:为什么以下工作呢?
int main() {
auto test = +[]{}; // Note the unary operator + before the lambda
test = []{};
}
Run Code Online (Sandbox Code Playgroud)
从我查找的内容来看,我的语法是正确的,但我的编译器(VS2015)却在抱怨。请注意,我将名称空间 ee 与类 Network 一起使用。这是代码
//code that doens't work
thread clientThread(&ee::Network::clientRun, new ee::Network);
Run Code Online (Sandbox Code Playgroud)
*注意:在实际代码中,我没有将 new 作为参数调用,我在这里这样做是为了缩短代码。
我已经测试了这些功能并且它们可以工作,但我无法使用线程使它们工作。这是他们的签名。
void serverRun();
void clientRun();
void clientRun(string ip);
Run Code Online (Sandbox Code Playgroud)
我的错误是:
错误 C2661“std::thread::thread”:没有重载函数需要 2 个参数
abc 没有构造函数“std::thread::thread”的实例与参数列表匹配
有没有人对这种情况下可能发生的事情有任何见解?