2015-03-31 49 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*初始化,可以修改或销毁,而不会影响其他。