我在Lua很新,我想用Lua嵌入我們的遊戲項目。我注意到的第一件事,Lua被允許編譯爲C++代碼,並且從文檔中,我瞭解到,這將消除Lua頭文件中的'extern C'包裝,並且錯誤處理將是C++異常,而不是跳遠踏板/ setjump。將Lua編譯爲C++除了避免'extern C'並獲得'C++異常'之外,還有什麼好處?
我的問題是,除了這兩個區別之外,還有沒有其他真正的好處將Lua代碼編譯爲C++代碼?這兩個並不真正說服我,因爲,1)它不打擾我用'extern C'封裝c頭文件,2)我們的項目不允許異常,所以我必須在luaconf.h中更改以使用longjump/setjump任何方式。
此外:「不允許異常」可解釋兩種方式。 1.沒有用戶代碼可以拋出異常,或者2.您編譯時禁用了異常。不同之處在於許多標準的東西會在case 1中拋出異常(如new)。在這些情況下,如果其中一個異常觸及lua C-C++邊界,則可能會出現「奇怪」的行爲。 –
@MichaelAnderson:沒錯,但是如果沒有用戶代碼拋出異常,用戶代碼*也不會捕獲它們。這意味着'std :: bad_alloc'只會冒泡過去並終止應用程序。在這種情況下,堆棧甚至不放鬆。 –
@NicolBolas:謝謝你的解釋。正如你所說的,我們禁止在用戶代碼中使用**異常,並且我們已經讓Google Breakpad捕獲所有未處理的異常,並讓我們的遊戲終止。這就是爲什麼Lua中的異常處理在我們的案例中沒有意義。 –