gpt4 book ai didi

c++ - 如何在构造函数中使用 std::optional?

转载 作者:搜寻专家 更新时间:2023-10-31 00:50:57 26 4
gpt4 key购买 nike

我将 std::optional 放在类的构造函数中。但是,当我创建该类的一个实例时,省略了可选参数,我得到的错误是该类不存在这样的构造函数。我想知道如何正确使用 std::optional。

我的“Car”类的构造函数如下所示:

Car::Car(string make, string model, Racer *driver, optional<Racer*> codriver) : m_make(make), m_model(model), m_driver(driver), m_codriver(codriver)
{
}

这是我的 main 的样子:

void main()
{
Racer *r1 = new Racer{ "John Doe", "male", "08/05/1987", "Ford" };
Racer *r2 = new Racer{ "Jane Doe", "male", "06/09/1990", "Ford" };
Racer *r3 = new Racer{ "Howard", "male", "18/04/1985", "Dodge" };

Car c1{ "Ford", "Mustang GT350R", r1, r2 };
Car c2{ "Dodge", "Challenger SRT Hellcat RedEye", r3 };
}

我希望使用 optional 可以让我在创建 Car 的新实例时不必提供副驾驶。然而,情况似乎并非如此,因为我收到一个错误,指出没有这样的构造函数。

最佳答案

您可以为选项设置默认参数:

Car(string make, string model, Racer *driver, optional<Racer*> codriver=std::nullopt) 
: m_make(make), m_model(model), m_driver(driver), m_codriver(codriver) { }

但正如 Deduplicator 所说,这也可以通过使用指针作为选项类型(null/not-null)来完成:

Car(string make, string model, Racer *driver, Racer* codriver=nullptr) 
: m_make(make), m_model(model), m_driver(driver), m_codriver(codriver) { }

关于c++ - 如何在构造函数中使用 std::optional?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56497319/

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