gpt4 book ai didi

c++ - boost optional 承认继承?

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

class Base {};
class Derived : public Base {};

void func(boost::optional<Base>&) {}

int main () {
boost::optional<Derived> x;
func(x);
}

func 会接受两个可选值:base 和 derived 吗?

最佳答案

不,它不会起作用。 funcboost::optional<Base> 取一个左值引用.这意味着它可以接受 boost::optional<Base> 类型的左值。 , 一个从 boost::optional<Base> 公开且明确派生的类型的左值,或具有 operator boost::optional<Base>&() 的其他类型. boost::optional<Derived> 这些都不是真的.类模板在 C++ 类型系统中不协变 - boost::optional<Derived>不继承自 boost::optional<Base> .


如果 func 就不同了以值(value)论证它的论点。如果它看起来像:

void func(boost::optional<Base> ) { }

在这种情况下,您可以调用funcboost::optional<Derived> .但是那个转换构造函数被标记为 explicit ,所以你必须写:

func(boost::optional<Base>{x});

这是明确的好 - 你清楚地标记你正在(可能)切片 x .

关于c++ - boost optional 承认继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37302124/

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