3

我为 XML Lite 库编写了一个小包装器,以便在我的 MFC 项目中使用它。我可以使用此代码吗?

CString GetValue()
{
    const WCHAR* pwszValue = NULL;
    UINT cwchValue = 0;

    m_pReader->GetValue(&pwszValue, &cwchValue);

    return CString(pwszValue);
}

或者我应该在 GetValue 方法签名中使用 CString& 参数吗?

4

3 回答 3

3

无需通过参数返回,这应该可以。

如果您担心效率,请不要。在这种情况下很可能会发生返回值优化。

于 2012-07-29T19:50:14.763 回答
1

如果您正在考虑效率,请打开优化和测量。并考虑差异(如果有)是否对您很重要。几乎可以肯定编译器会在这里进行返回值优化(RVO)。

但作为一般规则,请使用为您提供更清晰代码的编码实践,即在本例中为函数结果,它提供更简洁、健壮和可读的调用代码。

也就是说,看起来您正在泄漏 的内存pwszValue并且匈牙利符号前缀不完全可读并且降低了清晰度,因此即使您做了明智的事情并使用函数结果值,代码也需要进行一些修改。

于 2012-07-29T19:53:09.570 回答
0

CString&会大错特错,返回一个临时的引用,你的程序会很快崩溃。

于 2012-07-29T19:51:21.807 回答