返回函数局部变量作为参考

Fel*_*bek 2 c++ static reference

我找到了这个源代码:

inline GUID& WString2Guid(wstring src)
{
    static GUID result;
    HRESULT hr = ::CLSIDFromString(W2OLE(const_cast<WCHAR*>(src.c_str())), &result);
    if (FAILED(hr)) {
        //ERROR: The string '%s' is not formatted as a GUID!
        throw(E_INVALIDARG);
    }
    return result;
}
Run Code Online (Sandbox Code Playgroud)

在这里返回引用有什么用?调用代码无论如何都无法获得引用,因为该变量将在那时离开其范围.那么这个小&标志有什么不同吗?

澄清/扩展问题:在同一个示例程序中,该函数被称为

GUID guid = WString2Guid(id); // way 1
Run Code Online (Sandbox Code Playgroud)

如果我想使用该参考,我不会打电话

GUID& guid = WString2Guid(id); // way 2
Run Code Online (Sandbox Code Playgroud)

代替?

另一个问题; 为什么之前CLSIDFromString使用::范围运算符调用函数?如果有另一个使用相同名称声明的本地函数,这只会有意义,不是吗?

Naw*_*waz 11

No. resultstatic局部变量,因此即使在函数退出后它也会存在.不要将此与非静态局部变量混淆.

::in ::CLSIDFromString告诉编译器CLSIDFromString从全局命名空间中进行选择,以防CLSIDFromString 在其他命名空间中定义的定义很多,在调用站点可见.