[問題] 一個 JavaScript 程式 改為 C++ 程式

看板C_and_CPP (C/C++)作者 (kikilala)時間10年前 (2015/12/27 21:27), 編輯推噓5(5016)
留言21則, 6人參與, 最新討論串1/1
開發平台(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://www.ptt.cc/bbs/C_and_CPP/M.1451222862.A.F11.html

12/27 22:15, , 1F
你的x=1,他scope的範圍只在sub1(),sub2()裡不知道x
12/27 22:15, 1F

12/27 22:18, , 2F
還有就是你sub2()也沒回傳東西
12/27 22:18, 2F

12/27 22:35, , 3F
我來練習看看https://repl.it/BafW/2
12/27 22:35, 3F

12/27 23:29, , 4F
@NaiveRed,我知道沒宣告會這樣,但是JavaScript可以?
12/27 23:29, 4F

12/27 23:30, , 5F
sub2()也沒回傳東西,想改成void sub2(),可是會錯~
12/27 23:30, 5F

12/27 23:32, , 6F
所以就改成int sub2(),編譯就通過了! x改成"Hello!"
12/27 23:32, 6F

12/27 23:33, , 7F
https://repl.it/BafW/3 所以是真的有跑到sub2()裡
12/27 23:33, 7F

12/27 23:34, , 8F
只是不懂JavaScript為什麼可以跑出x=1,C++卻不行呢?
12/27 23:34, 8F

12/27 23:41, , 9F
把int x設定全域變數,答案就是1了~但不是我要的~
12/27 23:41, 9F

12/27 23:45, , 10F
JS 的 scope 規則確實會把 sub1 的 x 帶入 sub2
12/27 23:45, 10F

12/27 23:46, , 11F
因為 C++ 沒有函式內函式這東西 (lambda 是語法糖, scope
12/27 23:46, 11F

12/27 23:47, , 12F
跟 JS 的 scope 是分開的), 所以並沒有直接轉成 C++ 的方法
12/27 23:47, 12F

12/27 23:49, , 13F
JS 在這裡還會扯到 closure 的概念, 這並不是 C++ 有的東西
12/27 23:49, 13F

12/28 10:42, , 14F
對不起 我不會JS QQ
12/28 10:42, 14F

12/28 17:00, , 15F
謝謝L大大的說明
12/28 17:00, 15F

12/28 21:36, , 16F
closure 跟 lambda http://ideone.com/Jzldmc
12/28 21:36, 16F

12/28 21:36, , 17F
但我用 c++11 寫不出 sub4... 求救
12/28 21:36, 17F

12/28 21:42, , 18F
用 std::function 牙
12/28 21:42, 18F

12/28 22:10, , 19F
是沒錯啦,但想盡可能乾淨一些
12/28 22:10, 19F

12/28 22:12, , 20F
有 capture 其他東西的話就無法,除非手動寫 struct
12/28 22:12, 20F

12/28 22:13, , 21F
不然總是得把型別擦掉
12/28 22:13, 21F
文章代碼(AID): #1MV-TEyH (C_and_CPP)
文章代碼(AID): #1MV-TEyH (C_and_CPP)