簡體   English   中英

C ++模板默認構造函數

[英]C++ Template Default Constructor

模板有點問題:

template <typename T>
T Func(){
    std::string somestr = "";
    // somestr = ...
    if (somestr != ""){ 
        return boost::lexical_cast<T>(somestr);
    }
    else{
        T ret; // warning: "ret may be uninitialized in this function"
        return ret;
    }
}

如果此函數無法獲得結果,我想返回一個有效的對象,但盡可能為空。 如果我像上面那樣做,我會收到警告“ret可能在此功能中未初始化”。 Try-Catch無法刪除警告..

有沒有辦法像C#中的default關鍵字一樣?

return default(T); // C#

謝謝!

ret可能是未初始化的,因為T可能是POD類型或沒有用戶聲明的構造函數的其他類型。

您可以調用默認構造函數(並對任何POD類型對象進行值初始化),如下所示:

T ret = T();
return ret;

或者,更簡潔,

return T();

這假定T是默認可構造的。 如果您可能需要使用不是默認構造的類型來實例化此函數,則可以將“默認”大小寫作為參數。 例如,

template <typename T>
T Func(const T& default_value = T())
{
    // ...
}

這將允許您仍然可以為默認可構造的類型調用Func() ,還可以顯式提供一個值來返回非類型的類型。

暫無
暫無

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

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