作者kikilalagirl (kikilala)
看板C_and_CPP
標題[問題] 一個 JavaScript 程式 改為 C++ 程式
時間Sun Dec 27 21:27:37 2015
開發平台(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 來測試
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.255.146.55
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1451222862.A.F11.html
1F:→ NaiveRed: 你的x=1,他scope的範圍只在sub1(),sub2()裡不知道x 12/27 22:15
2F:→ NaiveRed: 還有就是你sub2()也沒回傳東西 12/27 22:18
4F:→ kikilalagirl: @NaiveRed,我知道沒宣告會這樣,但是JavaScript可以? 12/27 23:29
5F:→ kikilalagirl: sub2()也沒回傳東西,想改成void sub2(),可是會錯~ 12/27 23:30
6F:→ kikilalagirl: 所以就改成int sub2(),編譯就通過了! x改成"Hello!" 12/27 23:32
8F:→ kikilalagirl: 只是不懂JavaScript為什麼可以跑出x=1,C++卻不行呢? 12/27 23:34
9F:→ kikilalagirl: 把int x設定全域變數,答案就是1了~但不是我要的~ 12/27 23:41
10F:推 LPH66: JS 的 scope 規則確實會把 sub1 的 x 帶入 sub2 12/27 23:45
11F:→ LPH66: 因為 C++ 沒有函式內函式這東西 (lambda 是語法糖, scope 12/27 23:46
12F:→ LPH66: 跟 JS 的 scope 是分開的), 所以並沒有直接轉成 C++ 的方法 12/27 23:47
13F:→ LPH66: JS 在這裡還會扯到 closure 的概念, 這並不是 C++ 有的東西 12/27 23:49
14F:→ NaiveRed: 對不起 我不會JS QQ 12/28 10:42
15F:→ kikilalagirl: 謝謝L大大的說明 12/28 17:00
17F:→ holydc: 但我用 c++11 寫不出 sub4... 求救 12/28 21:36
18F:推 suhorng: 用 std::function 牙 12/28 21:42
19F:推 holydc: 是沒錯啦,但想盡可能乾淨一些 12/28 22:10
20F:→ suhorng: 有 capture 其他東西的話就無法,除非手動寫 struct 12/28 22:12
21F:→ suhorng: 不然總是得把型別擦掉 12/28 22:13