我当前有0U作为函数的参数,它导致“警告C4965:整数0的隐式框;使用nullptr或显式强制转换”。此警告假设我使用0U
表示nullptr
;但是,我试图将0U
实际用作无符号零值整数。我发现的所有帮助都建议如何将0U
投射到nullptr
但不反过来。建议?
String::Format("{0}", 0U);
答案 0 :(得分:1)
String :: Format为格式字符串(第一个参数)之后的参数接受object类型的参数。由于0或0U都是结构体,因此它们将被隐式装箱为对象类型,因为这是参数的类型。在你的情况下,隐式装箱也不错,因为代码无论如何都必须将它装箱,并且你明确地装箱它将需要更多的代码。
考虑到通常你会"0"
而不是String::Format("{0}", 0)
,你的例子有些奇怪。通常你有一个参考引用和绕过隐含的盒子警告,你会在它上面调用ToString
(这就是String :: Format在内部会做什么)以避免额外的装箱。
所以下面的内容应该给出警告,因为你正在将一个struct传递给一个需要一个对象的参数,所以struct会被隐式装箱
int x = 0;
String::Format("{0}", x);
为了摆脱隐含的拳击,我通常会这样做
int x = 0;
String::Format("{0}", x.ToString());
这会将String传递给函数,字符串是引用类型,因此不需要加框。在上面给出的情况下避免隐式装箱确实有助于提高性能,因为你可以避免隐式装箱操作。