我已经阅读了lazy_split_view
添加的最新草稿。
但后来,我意识到它split_view
被重命名为lazy_split_view
,并且split_view
被更新了。
libstdc++
最近也通过使用GCC Trunk
版本https://godbolt.org/z/9qG5T9n5h实现了这一点
我在这里有一个简单的天真程序,显示了两个视图的用法,但我看不出它们的区别:
#include <iostream>
#include <ranges>
int main(){
std::string str { "one two three four" };
for (auto word : str | std::views::split(' ')) {
for (char ch : word)
std::cout << ch;
std::cout << '.';
}
std::cout << '\n';
for (auto word : str | std::views::lazy_split(' ')) {
for (char ch : word)
std::cout << ch;
std::cout << '.';
}
}
输出:
one.two.three..four.
one.two.three..four.
直到我注意到std::span<const char>
两个视图使用 as 时的差异。
在第一个std::views::split
:
for (std::span<const char> word : str | std::views::split(' '))
编译器接受我的代码。
在第二个中:std::views::lazy_split
for (std::span<const char> word : str | std::views::lazy_split(' '))
抛出编译错误。
我知道这两者之间会有差异,但我不能轻易发现它们。这是 C++20 中的缺陷报告还是 C++23 中的新功能(有更改),或两者兼而有之?