Visual C++ 文字 0 整数

Visual C++ Literal 0 Integer

我目前将 0U 作为函数的参数,它导致 "warning C4965: implicit box of integer 0; use nullptr or explicit cast." 此警告假设我使用 0U 表示 nullptr;但是,我试图实际使用 0U 作为无符号零值整数。我找到的所有帮助都建议如何将 0U 转换为 nullptr 但不是相反。有什么建议吗?

String::Format("{0}", 0U);

String::Format 将格式字符串(第一个参数)之后的参数作为对象类型的参数。由于 0 或 0U 都是结构,因此它们将被隐式装箱为对象类型,因为这就是参数的类型。在您的情况下,隐式装箱还不错,因为无论如何代码都必须对其进行装箱,而要明确装箱,您将需要更多代码。

你的例子有点奇怪,因为通常你会做 "0" 而不是 String::Format("{0}", 0)。通常你有一个参数来引用和绕过你会调用 ToString 的隐式框警告(这是 String::Format 无论如何都会在内部做的事情)以避免额外的装箱。

所以下面应该给出警告,因为您将结构传递给需要对象的参数,因此结构将被隐式装箱

int x = 0;
String::Format("{0}", x);

为了摆脱隐式装箱,我通常这样做

int x = 0;
String::Format("{0}", x.ToString());

这将一个字符串传递给函数,字符串是引用类型,因此不需要装箱。在我上面给出的情况下避免隐式装箱确实有助于提高性能,因为您可以避免隐式装箱操作。