C++/CLI中的"long"类型与C#有什么区别?

Chr*_*St. 0 c# types c++-cli long-integer

C++/CLI项目中,我有方法void DoSomething(long x);.如果我想在用C#编写的任何单元测试中使用它,则方法参数x显示为类型int.

为什么我必须更改签名才能在单元测试(C#)中void DoSomething(long long x);使用类型参数long

Han*_*ant 8

long是C#和C++中的关键字.它们并不意味着同样的事情.由于C++是目标互操作语言,C++/CLI设计人员进行了C++解释.

不完全是唯一不直观的映射:

  • C#byte => C++/CLI unsigned char
  • C#sbyte => C++/CLI char
  • C#char => C++/CLI wchar_t
  • C#ushort => C++/CLI unsigned short
  • C#uint => C++/CLI unsigned int
  • C#long => C++/CLI很长
  • C#ulong => C++/CLI unsigned long long
  • C#string =>没有等价物,请使用System :: String ^
  • C#decimal =>没有等效,使用System :: Decimal
  • C#object =>没有等价物,使用System :: Object ^
  • C#enum => C++/CLI public enum class
  • C#struct => C++/CLI值struct
  • C#class => C++/CLI ref class
  • C#interface => C++/CLI接口类
  • C#可空类型有哪些?=>没有等价物,使用Nullable <>

请注意public枚举所需的关键字,这是C++ 11采用enum class语法以来的必要之处.

只有void,bool,short,int,float和double关键字匹配.


Nat*_*ica 5

在C#中long是64位数据类型.在C++中,我们所知道的long是它必须保持与a相同或更多,int并且至少为32位.如果您使用的long longc ++保证至少为64位,这与C#中的相匹配.