繁体   English   中英

experimental :: basic_string_view <>是否适用于rvalues?

[英]Does experimental::basic_string_view<> work with rvalues?

我不是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';
}

住在Wandbox上

问题:我可以合法地将rvalue绑定到std :: experimental :: basic_string_view ,还是只是UB? 如果是,它是如何工作的? 据我所知,rvalue不会通过构造const绑定到const引用(我假设视图保持原始字符串),所以我认为在语句结束时std::experimental::string_view view_rvalue(std::string{"rvalue string"}); 引用将是悬空。 string_view是否使用更复杂的方法?

我问这个是因为我试图为一些矩阵类写一个类似的视图,并且还不知道如何处理rvalues(我当然可以禁用它们,但我不认为这是最好的方法)。

如果cpprefernce是正确的,那么这是UB。 std::string_view

典型的实现仅包含两个成员:指向常量CharTsize的指针。

构造函数有

构造一个以str.data()指向的元素开头的字符数组的第一个str.size()字符的视图。

因此,如果string_view只指向提供的字符串的基础char数组,那么一旦表达式结束并且临时被销毁,我们将有一个悬空指针。

正如评论中所指出的,这种行为可能被允许的一个原因是你可以将string_view传递给一个函数并从一个临时string构造string_view

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM