传递boost :: optional左值作为对函数的引用

犯罪

您能以某种方式将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;
}

毫不奇怪,这是行不通的。

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

阿农·齐尔卡(Arnon Zilca)

是的。您只需要初始化即可,optional如编译错误所示:

boost :: optional :: reference_type boost :: optional :: get()[with T = int; boost :: optional :: reference_type = int&]:断言“ this-> is_initialized()”失败。

这适用于&打印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仍将断言可选状态(onoperator*或on get()),这意味着如果未设置可选状态(boost::none),应用程序将崩溃。

因此,可以使用包含有效值的可选参数(non boost::none进行初始化,也可以使用pass optional<int>&

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么右值引用作为左值引用传递?

来自分类Dev

返回作为参数传递给函数的右值引用

来自分类Dev

当*作为模式传递时,boost :: regexp崩溃

来自分类Dev

函数中传递的右值作为参数被视为函数内的左值?

来自分类Dev

函数中传递的右值作为参数被视为函数内的左值?

来自分类Dev

使用boost :: bind传递成员函数

来自分类Dev

BOOST_SCOPE_EXIT将参数作为值传递

来自分类Dev

C ++ / Boost:将成员函数作为参数传递给boost :: bind

来自分类Dev

如何使用boost :: optional传递可选的输入参数

来自分类Dev

将unique_ptr引用传递给boost :: bind吗?

来自分类Dev

将函数引用作为参数传递

来自分类Dev

如何将函数参数传递给boost :: async()

来自分类Dev

传递一个增加boost :: fusion:vector元素的函数

来自分类Dev

Boost :: Graph中的read_graphviz(),传递给构造函数

来自分类Dev

使用Boost Factory在构造函数中传递参数

来自分类Dev

如何解决传递给Boost线程的函数中的歧义

来自分类Dev

传递输入参数作为右值引用?

来自分类Dev

在模板函数中使用boost :: optional参数作为参数

来自分类Dev

在模板函数中使用boost :: optional参数作为参数

来自分类Dev

右值引用可以作为const引用传递吗?

来自分类Dev

传递迭代器值而不是引用函数

来自分类Dev

在函数之间传递右值引用

来自分类Dev

标量传递值到函数作为参数

来自分类Dev

C ++ Boost函数回调。如何调用函数作为回调并在内部传递参数?

来自分类Dev

如何传递副本构造函数作为方法引用?

来自分类Dev

将参数化的构造函数作为方法引用传递

来自分类Dev

获取作为函数传递的Lambda中的参数的引用

来自分类Dev

将引用作为函数参数传递不起作用

来自分类Dev

是否可以将* this作为接受引用(&)的函数的参数传递?

Related 相关文章

  1. 1

    为什么右值引用作为左值引用传递?

  2. 2

    返回作为参数传递给函数的右值引用

  3. 3

    当*作为模式传递时,boost :: regexp崩溃

  4. 4

    函数中传递的右值作为参数被视为函数内的左值?

  5. 5

    函数中传递的右值作为参数被视为函数内的左值?

  6. 6

    使用boost :: bind传递成员函数

  7. 7

    BOOST_SCOPE_EXIT将参数作为值传递

  8. 8

    C ++ / Boost:将成员函数作为参数传递给boost :: bind

  9. 9

    如何使用boost :: optional传递可选的输入参数

  10. 10

    将unique_ptr引用传递给boost :: bind吗?

  11. 11

    将函数引用作为参数传递

  12. 12

    如何将函数参数传递给boost :: async()

  13. 13

    传递一个增加boost :: fusion:vector元素的函数

  14. 14

    Boost :: Graph中的read_graphviz(),传递给构造函数

  15. 15

    使用Boost Factory在构造函数中传递参数

  16. 16

    如何解决传递给Boost线程的函数中的歧义

  17. 17

    传递输入参数作为右值引用?

  18. 18

    在模板函数中使用boost :: optional参数作为参数

  19. 19

    在模板函数中使用boost :: optional参数作为参数

  20. 20

    右值引用可以作为const引用传递吗?

  21. 21

    传递迭代器值而不是引用函数

  22. 22

    在函数之间传递右值引用

  23. 23

    标量传递值到函数作为参数

  24. 24

    C ++ Boost函数回调。如何调用函数作为回调并在内部传递参数?

  25. 25

    如何传递副本构造函数作为方法引用?

  26. 26

    将参数化的构造函数作为方法引用传递

  27. 27

    获取作为函数传递的Lambda中的参数的引用

  28. 28

    将引用作为函数参数传递不起作用

  29. 29

    是否可以将* this作为接受引用(&)的函数的参数传递?

热门标签

归档