【发布时间】:2016-01-29 17:04:37
【问题描述】:
我不是 100% 认为以下代码在语义上是正确的:
#include <iostream>
#include <experimental/string_view>
int main()
{
std::string str = "lvalue string";
std::experimental::string_view view_lvalue(str);
std::experimental::string_view view_rvalue(std::string{"rvalue string"});
std::cout << view_lvalue << '\n' << view_rvalue << '\n';
}
问题:我可以合法地将右值绑定到std::experimental::basic_string_view,还是只是UB?如果是,它是如何工作的?据我所知,右值不会通过构造函数绑定到 const 引用(我假设视图保留原始字符串),所以我认为在语句的末尾 std::experimental::string_view view_rvalue(std::string{"rvalue string"}); 引用将是悬空。 string_view 是否使用更复杂的方法?
我问这个是因为我正在尝试为某些矩阵类编写类似的视图,但还不知道如何处理右值(我当然可以禁用它们,但我认为这不是最好的方法)。
【问题讨论】:
标签: c++ c++11 c++17 string-view