为何在while循环中调用lambda表达式时需在其后添加()?
为什么Lambda表达式后面要加
()? 嘿,这个问题问得特别关键!咱们把这个逻辑拆解开来说清楚:
首先得明确一个核心点:while循环的条件需要的是一个布尔值(bool),用来判断要不要进入下一轮循环。
再看你代码里的[&s]()->bool { cout << "Please Input you word<input \"q \" to exit>:"; return (cin >> s) && (s != "q"); }——这部分只是定义了一个Lambda表达式。你可以把它理解成一个匿名的“小函数”,它本身并不是一个布尔值,而是一个可以被调用的「可调用对象」。如果只把这个Lambda写在while条件里而不加(),就相当于你把这个“小函数”本身丢给了while,而不是执行它之后得到的结果。
那后面的()作用是什么?就是调用这个Lambda表达式,让它执行大括号里的所有逻辑:
- 先打印提示输入的文字
- 读取用户输入到变量
s - 判断输入是否有效(
cin >> s成功)并且输入的内容不是"q"
调用完成后,Lambda会返回这个判断的布尔结果,这个结果正好作为while循环的条件,决定是否继续循环。
打个简单的比方:这就像你写了一个普通函数
bool checkAndGetInput(string &s) { cout << "Please Input you word<input \"q \" to exit>:"; return (cin >> s) && (s != "q"); }
你在while里肯定会写while(checkAndGetInput(s))而不是while(checkAndGetInput),对吧?Lambda在这里和这个普通函数的逻辑完全一样,加()就是触发它执行并拿到返回值。
内容的提问来源于stack exchange,提问作者Rabbit_Drivers
相关产品推荐
相关产品推荐

