gpt4 book ai didi

c++ - 提供 optional 参数的现代 C++ 方法

转载 作者:行者123 更新时间:2023-12-03 06:46:11 24 4
gpt4 key购买 nike

让我们采用以下函数声明:

void print(SomeType const* i);
在这里,参数 const*i 性质暗示了该参数是 optional 意图,因为它可能是 nullptr 。如果这不是故意的,则参数将只是 const& 。传达 optional 语义当然不是设计指针的初衷,但使用它们来这样做恰好可以很好地工作很长时间。
现在,由于在现代 C++ 中通常不鼓励使用原始指针(应该避免使用 std::unique_ptrstd::shared_ptr 以精确指示特定的所有权语义),我想知道如何正确指示函数参数的 optional 语义 而不传递值 , 一世。 e. 复制 ,如
void print(std::optional<SomeType> i);
会做。
经过一段时间的思考,我想出了使用的想法:
void print(std::optional<SomeType const&> i);
这实际上是最精确的。但事实证明 std::optional cannot have reference types
此外,使用
void print(std::optional<SomeType> const& i);
绝不会是最佳的,因为那时我们将要求我们的 SomeType 存在于调用方的 std::optional 中,同样可能(或相当可能)需要在那里复制。
问题: 那么,在不复制的情况下允许 optional 参数的现代方法是什么?在现代 C++ 中,在这里使用原始指针仍然是一种合理的方法吗?

¹:具有讽刺意味的是,为什么 std::optional 不能具有引用类型(关于重新绑定(bind)或转发分配的争议)的描述原因不适用于 std::optional 的 const 引用,因为它们不能被分配。

最佳答案

接受原始指针非常好,并且仍然在大量“现代”代码库中完成(我会注意到这是一个快速移动的目标)。只需在函数上添加注释,说明它允许为 null 以及函数在调用后是否保存指针的拷贝(即指向值的生命周期要求是什么)。

关于c++ - 提供 optional 参数的现代 C++ 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64443556/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com