[问题] 一个 JavaScript 程式 改为 C++ 程式

楼主: kikilalagirl (kikilala)   2015-12-27 21:27:37
开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
GCC 4.6.3
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)

问题(Question):
怎么把 JavaScript 的程式码 , 改成 C++ ?
喂入的资料(Input):

预期的正确结果(Expected Output):
1
错误结果(Wrong Output):
main.cpp: In function 'int sub2()':
main.cpp:21:13: error: 'x' was not declared in this scope
cout << x <<endl;
^
程式码(Code):(请善用置底文网页, 记得排版)
JavaScript 原始码 (书本的范例,正确) => http://pastebin.com/pCgAwAym
C++ 原始码 (自己改写,错误) => https://repl.it/BafW/1
补充说明(Supplement):
用 Chrome 测试 JavaScript 原始码 会当掉
请用 IE 或 Firefox 来测试
作者: NaiveRed (天真红)   2015-12-27 22:15:00
你的x=1,他scope的范围只在sub1(),sub2()里不知道x还有就是你sub2()也没回传东西
作者: stupid0319 (征女友)   2015-12-27 22:35:00
我来练习看看https://repl.it/BafW/2
楼主: kikilalagirl (kikilala)   2015-12-27 23:29:00
@NaiveRed,我知道没宣告会这样,但是JavaScript可以?sub2()也没回传东西,想改成void sub2(),可是会错~所以就改成int sub2(),编译就通过了! x改成"Hello!"https://repl.it/BafW/3 所以是真的有跑到sub2()里只是不懂JavaScript为什么可以跑出x=1,C++却不行呢?把int x设定全域变量,答案就是1了~但不是我要的~
作者: LPH66 (-6.2598534e+18f)   2015-12-27 23:45:00
JS 的 scope 规则确实会把 sub1 的 x 带入 sub2因为 C++ 没有函式内函式这东西 (lambda 是语法糖, scope跟 JS 的 scope 是分开的), 所以并没有直接转成 C++ 的方法JS 在这里还会扯到 closure 的概念, 这并不是 C++ 有的东西
作者: NaiveRed (天真红)   2015-12-28 10:42:00
对不起 我不会JS QQ
楼主: kikilalagirl (kikilala)   2015-12-28 17:00:00
谢谢L大大的说明
作者: holydc (のヮの)   2015-12-28 21:36:00
closure 跟 lambda http://ideone.com/Jzldmc但我用 c++11 写不出 sub4... 求救
作者: suhorng ( )   2015-12-28 21:42:00
用 std::function 牙
作者: holydc (のヮの)   2015-12-28 22:10:00
是没错啦,但想尽可能干净一些
作者: suhorng ( )   2015-12-28 22:12:00
有 capture 其他东西的话就无法,除非手动写 struct不然总是得把型别擦掉

Links booklink

Contact Us: admin [ a t ] ucptt.com