gpt4 book ai didi

c++ - 将 boost::optional 左值作为对函数的引用传递

转载 作者:行者123 更新时间:2023-11-30 03:51:59 24 4
gpt4 key购买 nike

你能以某种方式将 boost::optional 左值作为引用传递给一个改变值的函数吗?像这样 ( http://coliru.stacked-crooked.com/a/f77d3b095af3d66b ):

#include <iostream>

#include <boost/optional.hpp>

void foo(int& x)
{
x = 3;
}

int main() {
boost::optional<int> y;
foo(*y);
std::cout << *y << std::endl;
}

不出所料,这是行不通的。

该函数需要使用标准类型作为输出参数(例如 int& x)。我希望我能正确解释这一点。我问的是我的意图的一般可能性。

最佳答案

是的。你只需要初始化 optional就像你的编译错误提示的那样:

boost::optional::reference_type boost::optional::get() [with T = int; boost::optional::reference_type = int&]: Assertion `this->is_initialized()' failed.

这有效并打印 3 :

#include <iostream>
#include <boost/optional.hpp>

void foo(int& x)
{
x = 3;
}

int main() {
boost::optional<int> y = 2;
foo(*y);
std::cout << *y << std::endl;
}

op 注意到的一个重要评论是,即使在编译时不知道初始化值,boost 无论如何都会断言可选的状态(在 operator*get() 上),这意味着如果可选未设置 ( boost::none ) 应用程序将崩溃。

因此可以使用包含有效值的可选值(非 boost::none )进行初始化,或者传递 optional<int>& .

关于c++ - 将 boost::optional 左值作为对函数的引用传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30965872/

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