簡體   English   中英

警告C4172返回本地變量或臨時地址。 但是我返回一個輸入參數值

[英]Warning C4172 returning address of local variable or temporary. But I return a input argument value

我設計了一個模板類,它可以操作多種字符串,例如CString和std :: string。 我已經使用了很長時間,而且效果很好。 但是“ at”函數中的“ return str [i]”導致警告C4172,這意味着我返回了本地變量的地址。 但是str不是局部變量。 它應該從外面傳遞。 如何使編譯器不提示警告?

template<class TSTR, typename TCHR>
    class stringOpr
    {
    public:
        typedef typename TSTR TSTRING;
        typedef typename TCHR TCHARTYPE;
        virtual const TCHARTYPE& at(const TSTRING& str, int i) const
        {
            return str[i];//Warning C4172
        }
...
};

在此處輸入圖片說明

該警告是有道理的。 如果存在MyString,則其運算符未返回引用。

class MyString
{
char operator[](int i) const;
};

此功能將崩潰。 在這種情況下,您應該重寫“ at”函數以適合返回的引用。 如果您確實要返回參考,請執行此操作,

#pragma warning(disable : 4172)    
virtual const TCHARTYPE& at(const TSTRING& str, int i) const
{
    return str[i];
#pragma warning(default : 4172)
}

忽略警告,然后重新啟用它。

/ ------------------------------------------------- - /

CString :: operator []確實不返回引用。 所以我讓步

virtual /*const*/ TCHARTYPE/*&*/ at(const TSTRING& str, int i) const
        {
            return str[i];
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM