2011-06-18 120 views
9

讓我首先澄清我的意思是'普通'C++ - 我目前正在閱讀Walter Savitch的「C++中的問題解決」。據我所知,這不是專門爲Microsoft或Unix編寫的。所以我的問題是,我在本書中學習的東西(我用於獲取C++的通用知識)與我一直在閱讀的有關CLI C++的東西有什麼不同?什麼是CLI/C++?它與'普通'C++有什麼不同?

CLI C++就是我會遇到的,如果我使用Visual C++?我完全困惑。

回答

11

C++/CLI,(有時也是C++/CLR)是指位於本地C++和.NET框架之間某處的語言。

它通常用於需要橋接一些本機代碼(純C++)和託管代碼(如VB,C#,F#等)的應用程序。但是,C++/CLI與普通的C++不同,它是一個非常不同的野獸。當人們說Visual C++時,含義可以根據上下文而有所不同。有時它們的意思是啓用了公共語言運行時(CLR)層的C++,其他時候它們只是簡單的C++。不幸的是,這裏有很多不同的術語,還有很多名不副實的人,但是你能做什麼?

+0

所以如果我只是想使用標準的C++,模板和提升我不需要CLR?如果我想使用.NET庫,爲什麼需要使用CLR?謝謝 – Jean

+1

任何時候你打算調用.NET庫,或者如果你想讓你的代碼和調用它的.NET代碼都很好,你就可以使用CLR。如果你的願望只是寫簡單的C++,那麼就不要打擾C++/CLI。兩者都有他們預期的領域,但是如果你正在編寫純粹的C++,那麼不需要CLR。 –

+3

「*有時也有C++/CLR *」否 - 語言的名稱是C++/CLI;如果它曾經被稱爲C++/CLR,那麼對於不瞭解任何更好的人來說這是一個錯誤。 – ildjarn

6

C++和C++/CLI差別很大。 C++/CLI是C++的託管.NET版本,由Microsoft制定,用於從.NET向本地代碼啓用一層。

+0

http://en.wikipedia.org/wiki/C%2B%2B/CLI –

+4

「* Visual C++和C++/CLI差別很大*」這種說法會導致更多的困惑,而不是我認爲的解決辦法。 Visual C++是一種編譯器,C++/CLI是一種語言。 – ildjarn

+0

@ildjarn:好點,我總是把它看作是微軟對C++的實現。修正了。 – Xeo

1

C++/cli是Microsoft Visual C++品牌工具的當前版本。 (在C++/cli之前有一個不同的設計)

C++/cli實際上是C++的兩個版本之一。有一個高度標準化的C++編譯器,以及在CLI虛擬機上運行的C++版本。很明顯,標準C++從不在虛擬機上運行,​​因此確定了這種語言的兩種方法。

使用它時,您可以混合使用非人工和託管代碼。 「非託管」是與標準C++一樣編譯的代碼。 「託管」是CLI(.Net)虛擬機的字節碼的代碼編譯器。微軟對託管代碼和非託管代碼都有廣泛的API。通過該產品,您可以訪問這兩個API。

您可以使用語言和工具開發標準C++應用程序,只需小心不要使用非標準擴展。如果您有疑問,我建議稍後再編譯一次。管理方是完全不標準的,即使是非管理方也有大量的非標準擴展。

PS我不是專家,但我很好奇,並在上週瞭解了這一點。我認爲你的問題值得回答。祝你好運!

+0

「C++/cli是Microsoft Visual C++品牌工具的當前版本。」這有點不準確/誤導。 Visual Studio是工具集。C++/CLI是其中支持的語言之一。 – DuckMaestro

+1

*「在CLI虛擬機上運行的C++版本」* - 存在CLR,它是*虛擬執行環境*。這不是**虛擬機。在執行之前,IL代碼總是**編譯爲本地機器代碼。 *「顯然,標準C++從不運行在虛擬機上」* - 沒有什麼明顯的,C++語言規範中沒有任何規定要求C++編譯爲本地機器指令。 C++可以很好地實現在VM中運行,並且仍然被稱爲*「標準C++」*。 – IInspectable

相關問題