6

我有一个相对简单的用例:我想将一个特征关联到一个类,该类将返回一些用户定义的字符串,即一些用户定义的注册 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 Lifetime)。

因此,这种使用 string_view 是否安全合适?

4

1 回答 1

7

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

这是正确的。

因此,这种用法string_view安全合适吗?

是的,你的代码很好。

于 2020-06-04T11:05:04.067 回答