2015-11-04 35 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。我们在这里创建引用,只是重新发布现有内容。 –