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的实例,初始化后将永远不会触及它。谢谢