传递boost::可选左值作为对函数的引用
passing boost::optional lvalue as a reference to a function
您能以某种方式将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()[其中T=int;boost:;optional:;referencetype=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也会断言可选项的状态(在operator*
或get()
上),这意味着如果未设置可选项(boost::none
),应用程序将崩溃。
因此,可以使用包含可选(非boost::none
)的有效值进行初始化,也可以传递optional<int>&
。
这里需要非常小心。如果将boost::optional替换为std::optional,那么std::optional不会用编译器保护您。请注意,使用std::optional,我尚未初始化。没有编译器错误。我被允许写入可选项,但可选项仍未被视为已初始化,即(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;
}
}
输出为
3 1
3 0
http://coliru.stacked-crooked.com/a/a169e7c43052a206
相关文章:
- 区分接受常量参数的函数引用/指针和与函数参数同名的非常量参数
- 类 Referention 中C++回调函数引用非静态函数
- 使用函数引用指向节点的指针删除链表中的节点?
- 解释通过从函数引用返回数组的语法
- "Class1"类"Class2"对象作为私有数据成员。如何通过"Class 2"函数引用"Class1"对象?
- 使用默认构造函数引用成员变量初始化错误
- 无法调用函数引用 c++
- 使用 decltype(this) 获取函数引用
- 我应该如何定义返回指针的函数?(引用指针与指针指针)
- 从内联函数引用文件静态变量
- Boost::将sigaction函数引用绑定到实例
- 一种比函数引用更有效的方法
- 奇怪的未定义函数引用,函数调用C++不存在
- 是否可以检测绑定成员函数引用的对象是否被删除或销毁
- 构造函数引用参数导致seg错误
- 是否可以使函数模板从函数引用中获取“decltype”
- 无法让 Lua 函数引用"self"
- 如何解析变量和函数引用(Linker & Compiler)?
- 从不同模块调用函数 - 引用错误
- 如何在主函数中连接到数据库,然后从其他函数引用它