C++ 使用函数调用结果初始化C++;03?

C++ 使用函数调用结果初始化C++;03?,c++,initialization,C++,Initialization,我目前有一个类,我需要完成以下等效任务(我无法发布我的实际代码): 问题是splitData很昂贵,我只想运行一次。通常,我会将结果存储在构造函数体中的局部变量中,但在这种情况下,许多成员不是默认可构造的,因此我必须在初始值设定项列表中初始化它们 我知道在C++11中,我可以使用委托构造函数来解决我的问题: class Data { public: Data(const std::string &data_string) : Data(splitData(data_s

我目前有一个类,我需要完成以下等效任务(我无法发布我的实际代码):

问题是
splitData
很昂贵,我只想运行一次。通常,我会将结果存储在构造函数体中的局部变量中,但在这种情况下,许多成员不是默认可构造的,因此我必须在初始值设定项列表中初始化它们

我知道在C++11中,我可以使用委托构造函数来解决我的问题:

class Data
{
public:
    Data(const std::string &data_string)
      : Data(splitData(data_string)) // splitData only called once
    {}
private:
    Data(const SplitResult &split_result)
      : member_1(split_result[0]),
        member_2(split_result[1]),
        member_3(split_result[2]),
        member_4(split_result[3]),
        member_5(split_result[4])
    {}
};

但是我想不出在C++03中实现它的任何方法。

split\u result
成为一个只用于初始化的成员怎么样:

class Data
{
    SplitResult split_result;
    //declare member_x here
public:
    Data(const std::string &data_string)
      : split_result(splitData(data_string)),
        member_1(split_result[0]),
        member_2(split_result[1]),
        member_3(split_result[2]),
        member_4(split_result[3]),
        member_5(split_result[4])
    {}
};

只需确保您在其他成员之前声明它,以便首先初始化它。成员初始化顺序由它们在类中定义的顺序决定。

如何将
split\u result
作为仅用于初始化的成员:

class Data
{
    SplitResult split_result;
    //declare member_x here
public:
    Data(const std::string &data_string)
      : split_result(splitData(data_string)),
        member_1(split_result[0]),
        member_2(split_result[1]),
        member_3(split_result[2]),
        member_4(split_result[3]),
        member_5(split_result[4])
    {}
};
Data (const std::string data_string, 
          SplitResult split_result = split_data(data_string)) : 
    member_1(split_result[0]),
        ...
只需确保您在其他成员之前声明它,以便首先初始化它。成员初始化顺序由它们在类中定义的顺序决定

Data (const std::string data_string, 
          SplitResult split_result = split_data(data_string)) : 
    member_1(split_result[0]),
        ...
这是没有检查,我在用手机

**UPD**不,它不会工作。新的尝试:

Data (const std::string data_string, 
          SplitResult split_result = SplitResult()) :
    member_1((split_result = split_data(data_string))[0]),
    member_2(split_result[1]), 
        ...
这是没有检查,我在用手机

**UPD**不,它不会工作。新的尝试:

Data (const std::string data_string, 
          SplitResult split_result = SplitResult()) :
    member_1((split_result = split_data(data_string))[0]),
    member_2(split_result[1]), 
        ...

我最终使用了这个答案的一个变体,我喜欢它,因为它不会强迫我存储SplitResult的实例,初始化后将永远不会触及它。谢谢我最终使用了这个答案的一个变体,我喜欢它,因为它不会强迫我存储SplitResult的实例,初始化后将永远不会触及它。谢谢