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