int 和 System::Int32 之间的区别
题
当我使用 C++ .NET 框架编写应用程序时,我想问一个问题。
当我专门为“for 循环”编写代码时,我总是使用这种编码风格:
for( int i=0; i<somevalue; ++i ) {
// Some code goes here.
}
但由于我使用 C++ .NET 我可以写
for( System::Int32 i=0; i<somevalue; ++i ) {
// Some code goes here.
}
我认为没有区别 我是对的吗?如果没有,你能解释一下这两种方式之间有什么区别吗?女巫一号更有效吗?
解决方案
唯一的区别可能是明确支持的值范围 int
和 System::Int32
.
System::Int32
使 32 位对于阅读代码的人来说更加明确。一个应该使用 int
只需要“一个整数”,然后使用 System::Int32
其中大小很重要(密码、结构),因此读者在保持不变的同时会清楚它。
使用 int
或者 System::Int32
生成的代码将是相同的:区别纯粹是显式可读性或代码外观之一。
其他提示
这 C++/CLI 语言规范 (p.50)说:
基本类型映射到实施提供的相应值类类型,如下:
signed char
映射到System::SByte
.unsigned char
映射到System::Byte
.- 如果是普通的
char
已签署,char
映射到System::SByte
;否则,它映射到System::Byte
.- 对于所有其他基本类型,映射为 实现定义的 [强调我的]。
这 不同 来自 C#,其中 int
被专门定义为别名 System.Int32
. 。在 C++/CLI 中,与在 ISO C++ 中一样, int
具有“执行环境架构建议的自然大小”,并且仅保证至少有 16 位。
在实践中, 但是,.NET 不能在 16 位系统上运行,因此您可以安全地假设 32 位 int
s。
但要小心 long
:Visual C++将其定义为32位,即 不是 与 C# long 相同。C++ 相当于 System::Int64
是 long long
.
no。其中一个只是另一个的别名。
c#中的int
与.NET的System.Int32
相同。
显然,与 C 和常规 C++ 不同,C# 和 C++/CLI 有一个 int
类型始终为 32 位长。
这得到了证实 微软软件定义网络, ,所以答案是两者之间没有区别,除了 int
打字速度比 System::int32
.
他们俩, int
和 int32
, ,确实是同义词; int
看起来会更熟悉一些, Int32
使 32 位对于阅读代码的人来说更加明确。