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

问题描述 投票:3回答:1

我有一个相对简单的用例。我想把一个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" };                                                     
    }                                                                                          
};

https:/godbolt.orgz5p8xkA

一切都很好,但由于string_view实际上并不拥有它的缓冲区,我想知道它是否能保证安全,我不只是指一个悬空的指针。从我所读到的内容来看,字符串字元的寿命保证和程序本身的寿命一样长(从这个SO 函数返回的字符串的生命周期).

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

c++ c++17 constexpr string-literals string-view
1个回答
4
投票

字符串的寿命保证和程序本身的寿命一样长。

这是正确的。

所以,这个用法是不是 string_view 安全和合适吗?

是的,你的代码是好的。

© www.soinside.com 2019 - 2024. All rights reserved.