[問題] 一個 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