2015-03-31 72 views
1

的初始化列表是否安全char*轉換爲std::string內初始化列表構造的象下面這樣:轉換C風格的刺來的std :: string內部構造

class MyClass{ 
public: 
MyClass(){} 
MyClass(
    char*char_Ptr_Definition_File 
    ,char*char_Ptr_Parameters_File 
    ,char*char_Ptr_Response_File 
    ,char*char_Ptr_Work_Dir 
    ) 
    : 
    m_string_Definition_File(std::string(char_Ptr_Definition_File)) 
    ,m_string_Parameters_File(std::string(char_Ptr_Parameters_File)) 
    ,m_string_Response_File(std::string(char_Ptr_Response_File)) 
    ,m_string_Work_Dir(std::string(char_Ptr_Work_Dir)) 
{ 
} 
private: 
    std::string m_string_Definition_File; 
    std::string m_string_Parameters_File; 
    std::string m_string_Response_File; 
    std::string m_string_Work_Dir; 
}; 
+0

爲什麼不是?你可以從char *創建一個字符串。 – NathanOliver 2015-03-31 13:27:09

回答

2

它是安全的,只要char*指向以空字符結尾的字符串。儘管如此,你並不需要太冗長。這將是罰款:

m_string_Definition_File(char_Ptr_Definition_File) 

您也可以通過設置該字符串是空的,以防止空指針,例如:

m_string_Definition_File(char_Ptr_Definition_File ? 
         char_Ptr_Definition_File : 
         "") 

等。但是這一般適用於從char*初始化字符串。

1

是的,假設char*字符串爲空終止。

http://www.cplusplus.com/reference/string/string/string/

在該鏈路中列出的第四個構造需要const char*,和 「份數空終止字符序列(C-字符串)由s指出」。

因此,一旦std::string已從char*初始化,可以修改或銷燬,而不會影響其他。