您能以某种方式将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
)。我希望我能正确解释。我问的是我意图的一般可能性。
是的。您只需要初始化即可,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] 删除。
我来说两句