我想把共屈服字符串文字和 std::strings
std::strings
Generator<std::string_view> range(int first, const int last) { while (first < last) { char ch = first++; co_yield " | "; co_yield std::string{ch, ch, ch}; } }
然而,我想知道std::string的寿命是多少?
如果你知道你要消费 string_view 立即
string_view
for(auto sv : range(65, 91)) std::cout << sv;
https://godbolt.org/z/d5eoP9aTE
你可以这样安全
Generator<std::string_view> range(int first, const int last) { std::string result; while (first < last) { char ch = first++; co_yield " | "; result = std::string{ch, ch, ch}; co_yield result; } }
co_yield 是的一种奇特形式 co_await 。这两个都是表达式。因此,它们遵循表达规则。表现为表达评价一部分的临时性将继续存在,直到整个表达完成。
co_yield
co_await
co-await 表达式不 完成 直到合作关系恢复之后。这很重要,就像你经常做的那样 co-await 关于prvalues,所以如果你做一些简单的事情 co_await some_function() ,您需要的返回值 some_function 继续存在,因为它 await_resume 函数需要能够被调用。
co-await
co_await some_function()
some_function
await_resume
如前所述, 共产量 只是一种奇特的形式 co-await 。所以规则仍然适用。所以任何 string_view 生成器返回的对象将指向有效值 之间 呼吁恢复郊游。
共产量