gpt4 book ai didi

c++ - 使用 string_view 构建 istringstream 不编译

转载 作者:行者123 更新时间:2023-11-30 00:42:57 24 4
gpt4 key购买 nike

我无法向 std::istringstream 的构造函数提供 std::string_view。以下代码无法编译(使用 Clang v8 启用 C++17):

std::string_view val = "Hello";
std::istringstream ss(val, std::ios_base::in);

我得到的错误是:

prog.cc:9:24: error: no matching constructor for initialization of 'std::istringstream' (aka 'basic_istringstream<char>')
std::istringstream ss(val, std::ios_base::in);
^ ~~~~~~~~~~~~~~~~~~~~~~
/opt/wandbox/clang-6.0.0/include/c++/v1/sstream:651:14: note: candidate constructor not viable: no known conversion from 'std::string_view' (aka 'basic_string_view<char>') to 'const std::__1::basic_istringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >::string_type' (aka 'const basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >') for 1st argument
explicit basic_istringstream(const string_type& __s,
^

但是这样做:

std::string_view val = "Hello";
std::istringstream ss(val.data(), std::ios_base::in);

这个问题对我来说很奇怪,因为这里应该只发生 1 个隐式转换:std::string_viewstd::basic_string。构造函数正在根据错误消息获取 basic_string

为什么我不能在不调用 string_view::data() 的情况下逐字使用 string_view

最佳答案

This issue is weird to me because there's only 1 implicit conversion that should be happening here: std::string_view to std::basic_string.

string_view 不能隐式转换为 string。构造函数(好吧,推导指南,但无论如何)被标记为explicit

这应该有效(未经测试):

std::string_view val = "Hello";
std::istringstream ss(std::string(val), std::ios_base::in);

显式的原因是它是一个(可能)昂贵的操作;涉及内存分配和数据复制。相反的转换 (string --> string_view) 很便宜,因此是隐式的。

关于c++ - 使用 string_view 构建 istringstream 不编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57259965/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com