Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 传递boost::可选左值作为对函数的引用_C++_Boost_Boost Optional - Fatal编程技术网

C++ 传递boost::可选左值作为对函数的引用

C++ 传递boost::可选左值作为对函数的引用,c++,boost,boost-optional,C++,Boost,Boost Optional,您能否以某种方式将boost::optionallvalue作为一个引用传递到一个函数中,从而更改该值?类似这样的内容(): #包括 #包括 void foo(int&x) { x=3; } int main(){ boost::可选y; foo(*y); std::cout是。您只需初始化可选的,就像编译错误所提示的那样: boost::optional::reference_type boost::optional::get()[带T=int;boost::optional::referen

您能否以某种方式将
boost::optional
lvalue作为一个引用传递到一个函数中,从而更改该值?类似这样的内容():

#包括
#包括
void foo(int&x)
{
x=3;
}
int main(){
boost::可选y;
foo(*y);

std::cout是。您只需初始化
可选的
,就像编译错误所提示的那样:

boost::optional::reference_type boost::optional::get()[带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;
}
#包括
#包括
void foo(int&x)
{
x=3;
}
int main(){
boost::可选y=2;
foo(*y);

std::cout您在这里需要非常小心。如果您将boost::optional替换为std::optional,则std::optional不会使用编译器保护您。请参阅,使用std::optional我尚未初始化。没有编译器错误。我可以写入可选项,但可选项仍然未被视为已初始化g> (bool)y==false

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

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

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

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

Nice,虽然无法通过boost::none初始化值:(.事实上,我正在通过调用一个可以返回int值或
boost::none
的方法来初始化
y
。如果它返回
boost::none
,它将断言。您回答了这个问题,谢谢!真的:\n您可以初始化它(使用非
boost::none
)或将
boost::optional&
传递给函数。
#include <iostream>
#include <boost/optional.hpp>
#include <boost/optional/optional_io.hpp>
#include <optional>

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

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

    {
      std::optional<int> y;
      foo(*y);
      std::cout << *y << " " << !!y << std::endl;
    }
}
3 1
3 0