Return 可选 class 方法
Return optional from class method
我在 class 中有一个可选成员,我想通过一种方法按值 return。
示例代码:
#include <stdio.h>
#include <optional>
#include <iostream>
using namespace std;
class bar {
public:
int a;
bar(const bar &obj) {
a = obj.a;
}
};
class foo {
public:
void init(){
abc->a = 100;
}
optional<bar> get() {
return abc;
}
optional<bar> abc;
};
int main()
{
foo temp;
temp.init();
auto copied = temp.get();
cout << "Expected value is 100, got: " << copied->a;
return 0;
}
代码输出一些垃圾值。
我该如何实现?
根据我的理解,可选存储为基础类型(不仅仅是引用)完全分配的内存,并且在 returning 一个可选变量时,基础类型的复制构造函数应该启动,这应该按原样将内存复制到新的可选值 returned.
你需要使用optional
的构造函数来确保它包含一个对象:(假设bar
的冗余复制构造函数,它阻止它被构造,被删除)
foo()
: abc{bar{100}}
{
}
或者,在创建 optional
之后:
void init(){
abc = bar{100};
}
否则,optional
将保持空状态,并且在空 optional
上调用 ->
会导致 undefined behavior。 optional
的复制构造函数在源为空时不复制构造包含的对象。
std::optional
就像一个智能指针,它默认为“空”值,因此访问其成员将是未定义的行为。使用前需要初始化:
void init(){
abc = bar();
abc->a = 100;
}
请注意,目前 bar
除了通过复制构造函数外无法构造,因此您需要添加默认构造函数或采用 int
参数的构造函数或删除不必要的副本构造函数。
我在 class 中有一个可选成员,我想通过一种方法按值 return。 示例代码:
#include <stdio.h>
#include <optional>
#include <iostream>
using namespace std;
class bar {
public:
int a;
bar(const bar &obj) {
a = obj.a;
}
};
class foo {
public:
void init(){
abc->a = 100;
}
optional<bar> get() {
return abc;
}
optional<bar> abc;
};
int main()
{
foo temp;
temp.init();
auto copied = temp.get();
cout << "Expected value is 100, got: " << copied->a;
return 0;
}
代码输出一些垃圾值。
我该如何实现?
根据我的理解,可选存储为基础类型(不仅仅是引用)完全分配的内存,并且在 returning 一个可选变量时,基础类型的复制构造函数应该启动,这应该按原样将内存复制到新的可选值 returned.
你需要使用optional
的构造函数来确保它包含一个对象:(假设bar
的冗余复制构造函数,它阻止它被构造,被删除)
foo()
: abc{bar{100}}
{
}
或者,在创建 optional
之后:
void init(){
abc = bar{100};
}
否则,optional
将保持空状态,并且在空 optional
上调用 ->
会导致 undefined behavior。 optional
的复制构造函数在源为空时不复制构造包含的对象。
std::optional
就像一个智能指针,它默认为“空”值,因此访问其成员将是未定义的行为。使用前需要初始化:
void init(){
abc = bar();
abc->a = 100;
}
请注意,目前 bar
除了通过复制构造函数外无法构造,因此您需要添加默认构造函数或采用 int
参数的构造函数或删除不必要的副本构造函数。