在构造函数的初始化列表中将 c-style-string 转换为 std::string

convert c-style-sting to std::string inside initialization list of a constructor

在构造函数的初始化列表中将 char* 转换为 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;
};

只要 char* 指向以 null 结尾的字符串就是安全的。你不需要那么冗长。这样就好了:

m_string_Definition_File(char_Ptr_Definition_File)

您也可以选择防止空指针,例如将字符串设置为空:

m_string_Definition_File(char_Ptr_Definition_File ?
                         char_Ptr_Definition_File :
                         "")

等等。但这通常适用于从 char* 初始化字符串。

是的,假设 char* 字符串以 null 结尾。

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

link中列出的第四个构造函数采用const char*,并且“复制指向的空终止字符序列(C字符串) s".

因此,一旦 std::stringchar* 初始化,可以在不影响另一个的情况下修改或销毁其中一个。