gpt4 book ai didi

c++ - 委托(delegate)构造函数和默认参数取决于其他参数

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:36:27 26 4
gpt4 key购买 nike

我有一个 B 的构造函数,其中有一些默认参数取决于其他参数:

struct A
{
int f();
A(const A&) = delete;
A(A&& );
// ....
};

struct B
{
B(A a, int n=a.f()) {//...}
// ...
};

这显然不能以那种方式工作,所以我想使用委托(delegate)构造函数:

struct B
{
B(A a, int n) {//...}
B(A a): B(a, a.f()) {}
};

然而,这也不起作用,因为 A 的复制构造函数被删除了。所以我需要类似的东西

struct B
{
B(A a, int n) {//...}
B(A a): B(std::move(a), a.f()) {}
};

然而,据我所知,不能保证 a.f() 在 std::move 之前求值,因此结果是未定义的。是否有可能在 std::move 之前获取 a.f() 的值,或者我应该更好地编写两个单独的构造函数?

最佳答案

你为什么不做一些更简单的事情——即重载你的构造函数?

struct B
{
B(A a) {
int n = a.f();
...
}
B(A a, int n) {
...
}
};

如果您不喜欢在 ... 中重复您的代码,您始终可以只调用一个私有(private)成员函数来完成剩余的构造。

关于c++ - 委托(delegate)构造函数和默认参数取决于其他参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54158233/

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