【发布时间】:2012-02-22 22:02:07
【问题描述】:
这是我在 Javascript Definitive Guide 中看到的 javascript 闭包代码。我想把它写成 C++11
var uniqueID1 = (function()
{
var id = 0;
return function() { return id++; };
})();
这是我写的cpp代码。但它没有被编译。 C++11可以表示同一个表达式吗?
auto c = []() -> int (*)() { int x = 0; return [&x]() -> int { return x++; }};
我正在使用 VS2010
编辑: 这是我制作的完整的 javascript 示例代码。您可以轻松地测试代码在您的网络浏览器上的工作方式。
<head>
<script language="javascript">
var uniqueID1 = (function()
{
var id = 0;
return function() { return id++; };
})();
var uniqueID2 = (function()
{
var id = 0;
return function() { return id++; };
})();
</script>
</head>
<body>
<input value = "uniqueid1" type="button" OnClick="alert(uniqueID1());"></input>
<input value = "uniqueid2" type="button" OnClick="alert(uniqueID2());"></input>
</body>
</html>
【问题讨论】:
-
哇,这是我见过的最不像 C++ 的 C++。我什至不知道您可以在任何 C 派生语言中按值返回新创建的函数。 编辑:你不能,正如 Nicol Bolas 提到的那样。
标签: javascript c++ lambda c++11 closures