返回从字符串文本创建的静态string_view是否安全?

Is it safe to return a static string_view created from a string literal?

本文关键字:view 是否 安全 string 静态 字符串 文本 创建 返回      更新时间:2023-10-16

我有一个相对简单的用例:我想将一个特征与一个类相关联,该类将返回一些用户定义的字符串,即一些用户定义的注册ID。由于这个注册应该在编译时定义,我希望它是constexpr,所以我写了如下的东西:

template <typename T>
struct ClassRegistration
{
static constexpr std::string_view
Name();
};
template <>                                                                                    
struct ClassRegistration<int>                                                            
{                                                                                              
static constexpr std::string_view                                                        
Name()                                                                                     
{                                                                                          
return std::string_view{ "int" };                                                     
}                                                                                          
};

https://godbolt.org/z/5p8xkA

一切正常,但由于string_view实际上并不拥有它的缓冲区,我想知道它是否保证是安全的,我不只是指一个悬空的指针。从我读到的内容来看,字符串文字保证具有与程序本身一样长的生存期(从函数返回的字符串文字的SO生存期(。

因此,string_view的这种用法是否安全、合适?

字符串

文字保证具有与程序本身一样长的生存期

没错。

因此,string_view的这种用法是否安全、恰当?

是的,你的代码很好。