我有以下方法std::string
作为输入参数。
int func(const std::string &filename);
从它的签名来看,输入类型是通过引用传递的(不复制),不应更改(通过const
前缀)。
它是否等同于使用std::string_view
,它也用于只读?
int func(std::string_view filename);
如果不是,那么它们在哪些方面不相似(运行时、内存消耗、功能等)
我有以下方法std::string
作为输入参数。
int func(const std::string &filename);
从它的签名来看,输入类型是通过引用传递的(不复制),不应更改(通过const
前缀)。
它是否等同于使用std::string_view
,它也用于只读?
int func(std::string_view filename);
如果不是,那么它们在哪些方面不相似(运行时、内存消耗、功能等)
不,它不等效。
在两种情况下使用std::string const&
是更好的选择。
您正在调用一个需要以空字符结尾的字符串的 C 函数。std::string_view
有一个data()
功能,但它可能不是以空值终止的。在这种情况下,接收 astd::string const&
是一个好主意。
您需要将字符串保存在某处,或者您正在调用需要std::string const&
. 有时它们是不希望更改的库中的函数。
所有其他情况会更好std::string_view
字符串视图和对字符串的引用之间也存在一些关键区别。
首先,您是按引用传递,而不是按值传递。编译器每次想要访问容量、大小或数据时都必须引用它。
其次,字符串视图不使用容量,仅使用大小和数据。这也意味着可以省略加载,因为您将其作为有限范围的局部变量按值传递。