[英]Returning RValueRef: warning C4172: returning address of local variable or temporary
[英]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.