gpt4 book ai didi

c++ - 理解 C++23 中的 std::inout_ptr 和 std::out_ptr

转载 作者:行者123 更新时间:2023-12-04 11:09:15 26 4
gpt4 key购买 nike

我正在阅读为 C++23 提出的库更改列表,我对 std::out_ptr 很好奇。和 std::inout_ptr (他们的 _t sibling )。据我所知,它们是智能指针与原始指针兼容的某种包装,但我还没有设法理解它们。也许这里有人熟悉该提案,或者可能会给出不太像 ISO 的解释或示例?

最佳答案

TL;博士 - 它是为了在 C out/inout 指针参数和智能指针之间实现更简单和更无缝的互操作性
更长的答案
让我们把东西分开。 std::out_ptrstd::inout_ptr是用于创建 std::out_ptr_t 类型对象的函数和 std::inout_ptr_t分别。这些类型和功能是做什么用的?让我们看一个受 this 启发的例子(为简单起见,我用好的 ol' int 替换了通用参数):

int foreign_resetter(int**);
auto up = std::make_unique<int>(5);

if (int ec = foreign_resetter(std::inout_ptr(up)) {
return ec;
}
如您所见 std::inout_ptr_t创建于 std::inout_ptr传递给函数,该函数采用指向 std::unique_ptr 的模板参数的指针的指针。 .添加前 std::inout_ptr_t与旧的 C 输入输出指针参数的互操作更加麻烦且容易出错。它看起来更不像这样:
int foreign_resetter(int**);
auto up = std::make_unique<int>(5);

int* up_raw = up.release();
if (int ec = foreign_resetter(&up_raw)) {
return ec;
}
up.reset(up_raw);

关于c++ - 理解 C++23 中的 std::inout_ptr 和 std::out_ptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68918312/

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