快速业务通道

C++/CLI解析之基于堆栈的对象与跟踪引用

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-30
么简单的,举例来说,虽然System::String是一个引用类,它提供了可接受两个句柄的 == 操作符与 != 操作符函数,但是,比较的是字符串的值,而不是它们的句柄。一般来说,在引用类中使用值这个说法,是有点让人感觉怪怪的,但对一个string类来说,却又是合情合理的。

在此非常清楚的一点是,万能的方法是不存在的。为对引用类的使用者,提供最适当的接口,就必须在基于他们所使用语言的基础上,多考虑一下他们的期望。但无论如何,C++/CLI程序员想要使用其他语言创建的引用类,就不得不要适应没有拷贝构造函数与赋值操作符这些情况。

其他话题

以下的话题非常简短、但却十分有帮助:

1、前面也提到,const不是很适合CLI,且在引用类中,C++/CLI也不允许用const(或volatile)来限定成员函数;但个关键字可用在某些类中实例构造函数或成员函数上。那么在此情况下,它的类型到底是什么呢?对本地类型N来说,它是N* const;然而,对一个引用类R来说,它只是一个R^。虽然句柄不是const限定的,但它的值却不能被修改。

2、Point::ToString的实现使用了如下形式:

return String::Concat("(", X, ",", Y, ")");

另外也可以像下面这样写:

return String::Format("({0},{1})", X, Y);

正如它的名字,Format函数允许对文本进行格式化(如前导的空格或零、或者一些分隔符等等),而不是简单地对字符串进行连接。

3、如果想要知道编译器是否支持C++/CLI扩展,可测试__cplusplus_cli宏是否已经预定义。如果已定义,它的值将为200406L。

4、CLI库包含了一个称为System::Decimal的类型,其至少可表示28位数字的值,这个类型是专为那些需要在没有四舍五入情况下进行大数额金融计算而准备的。与浮点类型不同,Decimal的小数部分能表示得更加精确,通常,当某数以浮点类型表示时,其经常会有一个无穷的小数,但却更容易导致舍入上的错误;而Decimal有一个称为"scale(数值范围)"的属性,其代表了十进制下所需的位数。举例来说,2.340的scale为3,其结尾的0非常重要,当两个十进制数相加或相减时,结果的数值范围是两者数值范围中较大的一者,如:1.0 + 2.000为3.000,而5.0-2.00为 3.00;当两个十进制数相乘时,结果的数值范围是两者数值范围之和,如:1.0*2.000为2.0000;当两个十进制相除时,结果的数值范围是除数的数值范围比被除数多出的值,如:4.00000/2.000为2.00。然而,数值范围不可能小于为表示正确的值所需的范围,例如,3.000/2.000、3.00/2.000、3.0/2.000和3/2都是1.5,下面是Decimal的使用范例:

Decimal x = Decimal::Parse("23.00");
Decimal y = Decimal::Parse("2.000");
Decimal result = x * y + Decimal::Parse("2.5");
Console::WriteLine(result);

输出为48.50000。请注意,C++/CLI没有字面意义上的Decimal类型,所以需要使用Parse函数。

5、如果有这样一种情况,一个类使用了C++/CLI之外的其他语言编写,且有一个名字为C++/CLI关键字的public成员,那就可通过__identifier(x)这种形式的内部函数来访问它,此处的x可以是一个标识符、一个关键字、或一个字面上的字符串,例如,为调用一个类X中名为delete、且没有参数的静态函数,就可以像X::__identifier(delete)()这样使用。

6、一个literal域是一个定义在类中的命名编译期常量,同样,它也必须有接受一个常量值的初始化程序。尽管一个literal域使用上像一个静态数据成员,但它并不能声明为static,且编译器会把每个literal域都替换为域值。一个literal域能有任意标量类型,但是,能用作初始化句柄的唯一常量数值,只能为字面上的字符串和nullptr。

literal double PI = 3.1415926

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号