C++ 返回从字符串文本创建的静态字符串视图安全吗?

C++ 返回从字符串文本创建的静态字符串视图安全吗?,c++,c++17,constexpr,string-literals,string-view,C++,C++17,Constexpr,String Literals,String View,我有一个相对简单的用例:我想将一个trait与一个类相关联,该类将返回一些用户定义的字符串,即一些用户定义的注册ID。由于这些注册应该在编译时定义,我希望它是constexpr,所以我写了如下内容: template <typename T> struct ClassRegistration { static constexpr std::string_view Name(); }; template <>

我有一个相对简单的用例:我想将一个trait与一个类相关联,该类将返回一些用户定义的字符串,即一些用户定义的注册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" };                                                     
    }                                                                                          
};
模板
结构类注册
{
静态constexpr std::string\u视图
名称();
};
模板
结构类注册
{                                                                                              
静态constexpr std::string\u视图
姓名()
{                                                                                          
返回std::string_view{“int”};
}                                                                                          
};

一切正常,但由于string_视图实际上并不拥有它的缓冲区,我想知道它是否保证安全,我指的不仅仅是一个悬空的指针。从我读到的内容来看,字符串文字的生命周期保证与程序本身的生命周期一样长(从这个意义上讲)

因此,使用string_view是否安全和合适

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

没错

因此,这种使用
string\u视图
是否安全和适当


是的,您的代码很好。

@nosensetal
静态constexpr
类作用域中的变量是隐式的
内联的
,所以它不应该在这里应用。@HolyBlackCat我知道,但我理解链接会让不知道的人感到困惑……谢谢@nosenseal,幸运的是这部分已经很清楚了