小编mat*_*att的帖子

将 std::vector<std::byte> 分配给 std::vector<char> 而不复制内存

我有一个函数返回一个 std::vector<std::byte>

我知道这std::byte不是字符类型也不是整数类型,并且只能通过类型转换将其转换为 char。到现在为止还挺好。

所以我想(在我知道向量只包含字符数据的情况下)将底层缓冲区的所有权从 thestd::vector<std::byte>转移到std::vector<char>using std::move,以避免复制整个底层缓冲区。

当我尝试这样做时,我收到此错误:

不存在从“std::vector<std::byte, std::allocatorsstd::byte>”到“std::vector<char,std::allocator>”的合适的用户定义转换

这完全可能使用 C++ 吗?我认为有真正的用例,人们会想要这样做

c++ byte vector c++17 stdmove

6
推荐指数
2
解决办法
475
查看次数

C++20 范围 - 如何将组合视图分配给变量?

有没有办法让它在 C++20 上工作?

\n
auto view = std::views::all;\n\nif (condition1) {\n    view = view | std::views::filter([](int i) {\n        return i%5 == 0;\n    });\n}\n\nif (condition2) {\n    view = view | std::views::filter([](int i) {\n        return i%10 == 0;\n    });\n}\n\n/* Do something with the view */\nfor (int i : list | view) {\n   ...\n}\n
Run Code Online (Sandbox Code Playgroud)\n

我收到这个丑陋的错误:

\n
\n

test.cpp:13:10: 错误:与 \xe2\x80\x98operator=\xe2\x80\x99 不匹配(操作数类型为 \xe2\x80\x98std::ranges::views::__adaptor::_RangeAdaptorClosurestd::范围::视图::<lambda(_Range&&) >\xe2\x80\x99 和\xe2\x80\x98std::ranges::views::__adaptor::_RangeAdaptorClosurestd::ranges::views::__adaptor::operator| <std::ranges::views::<lambda(_Range&&) >::<lambda(_Up&&)> >\xe2\x80\x99)\n13 | });\n| ^\n在 test.cpp 包含的文件中:2:\n/usr/include/c++/10/ranges:1155:14: 注意:候选者:\xe2\x80\x98constexpr std::ranges::views::__adaptor: :_RangeAdaptorClosurestd::ranges::views::<lambda(_Range&&) >& std::ranges::views::__adaptor::_RangeAdaptorClosurestd::ranges::views::<lambda(_Range&&) >::operator=(const std::ranges::views::__adaptor::_RangeAdaptorClosurestd::ranges::views::<lambda(_Range&&) >&)\xe2\x80\x99\n1155 | 结构 _RangeAdaptorClosure …

c++ range composition c++20 std-ranges

5
推荐指数
1
解决办法
786
查看次数

标签 统计

c++ ×2

byte ×1

c++17 ×1

c++20 ×1

composition ×1

range ×1

std-ranges ×1

stdmove ×1

vector ×1