2015-11-04 40 views
0

C++/CLI項目中我有方法void DoSomething(long x);。如果我想在使用C#編寫的任何單元測試中使用它,則方法參數x顯示爲類型int在C++/CLI和C#中輸入「long」有什麼區別?

爲什麼我必須將簽名更改爲void DoSomething(long long x);才能在我的單元測試(C#)中將它與參數類型long一起使用?

回答

5

在C#long是一個64位數據類型。在C++中我們所知道的關於long的是它必須保存多於或多於int,並且它至少是32位。如果您在C++中使用long long,並且保證至少有64位,這將與您在C#中的匹配。

+0

謝謝你的解釋。是什麼意思,如果我們編寫其他組合,例如'long int x'? –

+0

@ChristianSt。在C++中,'long'和'long int'沒有區別。 「長」是寫它的簡寫方式。 http://stackoverflow.com/questions/18971732/difference-between-long-long-long-long-int-and-long-long-int-in-c – NathanOliver

6

long是C#和C++中的關鍵字。他們根本不是指同一件事。由於C++是目標互操作語言,因此C++/CLI設計人員進行了C++解釋。

不完全是唯一的非直觀映射:

  • C#字節=> C++/CLI無符號字符
  • C#爲sbyte => C++/CLI炭
  • C#焦炭=> C++/CLI wchar_t的
  • C#USHORT => C++/CLI無符號短
  • C#UINT => C++/CLI無符號整型
  • C#長=> C++/CLI長長
  • C#ULONG => C++/CLI無符號長長
  • C#字符串=>無當量,使用系統::字符串^
  • C#十進制=>無當量,使用系統::十進制
  • C#對象=>沒有等價,使用系統::對象^
  • C#枚舉=> C++/CLI公共枚舉類
  • C#的struct => C++/CLI值結構
  • C#類=> C++/CLI引用類
  • C# interface => C++/CLI接口類
  • C#可空類型與? =>無當量,使用可空<>

當心所需public關鍵字用於枚舉,由於C++ 11必要的惡通過的enum class語法。

只有void,bool,short,int,float和double關鍵字匹配。

+0

謝謝。你能提供一個鏈接到這些信息嗎? –

+0

不,這是原創作品,不能複製任何內容。您必須閱讀整個語言規範才能找到返回的內容Emca-372。我們在這裏創建引用,只是重新發布現有內容。 –