gpt4 book ai didi

c++ - C++03使用函数调用结果初始化多个成员?

转载 作者:太空宇宙 更新时间:2023-11-04 15:50:08 24 4
gpt4 key购买 nike

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

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

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

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

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_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])
{}
};

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

关于c++ - C++03使用函数调用结果初始化多个成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9895976/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com